Version Description
- Add code improvements.
- Improve sanitization and localization.
- Test with WordPress 6.0.
- Test with PHP 8.0.
- Fix privacy policy link.
Download this release
Release Info
Developer | ShareThis |
Plugin | Google Analytics |
Version | 2.5.5 |
Comparing to | |
See all releases |
Code changes from version 2.5.4 to 2.5.5
- class/Ga_Admin.php +0 -997
- class/Ga_Helper.php +0 -743
- class/Ga_Notice.php +0 -35
- class/Ga_Sharethis.php +0 -101
- class/Ga_Stats.php +0 -1047
- class/Ga_Template.php +0 -73
- class/class-ga-admin.php +1228 -0
- class/{Ga_Autoloader.php → class-ga-autoloader.php} +21 -14
- class/{Ga_Frontend.php → class-ga-frontend.php} +25 -6
- class/class-ga-helper.php +888 -0
- class/{Ga_Hook.php → class-ga-hook.php} +9 -2
- class/class-ga-notice.php +54 -0
- class/class-ga-sharethis.php +146 -0
- class/class-ga-stats.php +1083 -0
- class/class-ga-template.php +82 -0
- class/controller/Ga_Admin_Controller.php +0 -113
- class/controller/class-ga-admin-controller.php +139 -0
- class/core/Ga_Controller_Core.php +0 -40
- class/core/class-ga-controller-core.php +47 -0
- class/core/{Ga_View_Core.php → class-ga-view-core.php} +15 -7
- css/ga_additional.css +221 -188
- css/ga_modal.css +62 -62
- css/ga_old_wp_support.css +11 -11
- css/googleanalytics.css +326 -328
- googleanalytics.php +31 -17
- js/googleanalytics.js +25 -23
- js/googleanalytics_createprop.js +48 -31
- js/googleanalytics_dashboard.js +262 -206
- js/googleanalytics_page.js +852 -677
- lib/Ga_Lib_Api_Request.php +0 -215
- lib/Ga_Lib_Api_Response.php +0 -42
- lib/cert/cacerts.pem +0 -4057
- lib/class-ga-lib-api-client-exception.php +13 -0
- lib/{Ga_Lib_Api_Client.php → class-ga-lib-api-client.php} +34 -15
- lib/class-ga-lib-api-request-exception.php +12 -0
- lib/class-ga-lib-api-request.php +241 -0
- lib/class-ga-lib-api-response.php +113 -0
- lib/class-ga-lib-google-api-client-accountsummaries-exception.php +12 -0
- lib/class-ga-lib-google-api-client-authcode-exception.php +45 -0
- lib/class-ga-lib-google-api-client-data-exception.php +12 -0
- lib/class-ga-lib-google-api-client-exception.php +90 -0
- lib/class-ga-lib-google-api-client-refreshtoken-exception.php +12 -0
- lib/{Ga_Lib_Google_Api_Client.php → class-ga-lib-google-api-client.php} +122 -155
- lib/class-ga-lib-sharethis-api-client-alerts-exception.php +12 -0
- lib/class-ga-lib-sharethis-api-client-exception.php +22 -0
- lib/class-ga-lib-sharethis-api-client-invaliddomain-exception.php +12 -0
- lib/class-ga-lib-sharethis-api-client-invite-exception.php +12 -0
- lib/class-ga-lib-sharethis-api-client-verify-exception.php +12 -0
- lib/{Ga_Lib_Sharethis_Api_Client.php → class-ga-lib-sharethis-api-client.php} +70 -52
- overwrite/ga-overwrite.php +19 -0
- overwrite/ga_overwrite.php +0 -13
- readme.txt +13 -5
- screenshot-1.png +0 -0
- screenshot-2.png +0 -0
- screenshot-3.png +0 -0
- screenshot-4.png +0 -0
- tools/{Ga_Cache.php → class-ga-cache.php} +73 -62
- tools/{class-support-logging.php → class-ga-supportlogger.php} +111 -55
- view/ga-accounts-selector.php +47 -0
- view/ga-auth-button.php +35 -0
- view/{ga_code.php → ga-code.php} +14 -1
- view/ga-dashboard-widget.php +110 -0
- view/ga-debug-modal.php +50 -0
- view/ga-googleanalytics-loader.php +20 -0
- view/ga-notice.php +22 -0
- view/ga-oauth-notice.php +12 -0
- view/ga-wp-notice.php +21 -0
- view/ga_accounts_selector.php +0 -26
- view/ga_auth_button.php +0 -7
- view/ga_dashboard_widget.php +0 -88
- view/ga_debug_modal.php +0 -32
- view/ga_googleanalytics_loader.php +0 -10
- view/ga_notice.php +0 -16
- view/ga_oauth_notice.php +0 -3
- view/ga_wp_notice.php +0 -9
- view/page.php +362 -256
- view/statistics.php +76 -13
- view/stats.php +223 -129
- view/templates/appearance.php +13 -5
- view/templates/date-custom-range-filter.php +32 -0
- view/templates/date_custom_range_filter.php +0 -26
- view/templates/demo-popup.php +11 -3
- view/templates/demographic-chart.php +69 -42
- view/templates/demographic.php +15 -9
- view/templates/exclusions.php +18 -13
- view/templates/gdpr-config.php +52 -32
- view/templates/gdpr.php +26 -18
- view/templates/purposes.php +68 -40
- view/templates/sidebar/demo-ad.php +26 -17
- view/templates/sidebar/gdpr-ad.php +30 -19
- view/trending.php +116 -85
class/Ga_Admin.php
DELETED
@@ -1,997 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
class Ga_Admin {
|
4 |
-
|
5 |
-
const GA_WEB_PROPERTY_ID_OPTION_NAME = 'googleanalytics_web_property_id';
|
6 |
-
const GA_EXCLUDE_ROLES_OPTION_NAME = 'googleanalytics_exclude_roles';
|
7 |
-
const GA_SHARETHIS_TERMS_OPTION_NAME = 'googleanalytics_sharethis_terms';
|
8 |
-
const GA_HIDE_TERMS_OPTION_NAME = 'googleanalytics_hide_terms';
|
9 |
-
const GA_VERSION_OPTION_NAME = 'googleanalytics_version';
|
10 |
-
const GA_SELECTED_ACCOUNT = 'googleanalytics_selected_account';
|
11 |
-
const GA_OAUTH_AUTH_CODE_OPTION_NAME = 'googleanalytics_oauth_auth_code';
|
12 |
-
const GA_OAUTH_AUTH_TOKEN_OPTION_NAME = 'googleanalytics_oauth_auth_token';
|
13 |
-
const GA_ACCOUNT_DATA_OPTION_NAME = 'googleanalytics_account_data';
|
14 |
-
const GA_WEB_PROPERTY_ID_MANUALLY_OPTION_NAME = 'googleanalytics_web_property_id_manually';
|
15 |
-
const GA_WEB_PROPERTY_ID_MANUALLY_VALUE_OPTION_NAME = 'googleanalytics_web_property_id_manually_value';
|
16 |
-
const GA_SHARETHIS_PROPERTY_ID = 'googleanalytics_sherethis_property_id';
|
17 |
-
const GA_SHARETHIS_PROPERTY_SECRET = 'googleanalytics_sherethis_property_secret';
|
18 |
-
const GA_SHARETHIS_VERIFICATION_RESULT = 'googleanalytics_sherethis_verification_result';
|
19 |
-
const MIN_WP_VERSION = '3.8';
|
20 |
-
const GA_SHARETHIS_API_ALIAS = 'sharethis';
|
21 |
-
const GA_DISABLE_ALL_FEATURES = 'googleanalytics_disable_all_features';
|
22 |
-
const GA_HEARTBEAT_API_CACHE_UPDATE = false;
|
23 |
-
const NOTICE_SUCCESS = 'success';
|
24 |
-
const NOTICE_WARNING = 'warning';
|
25 |
-
const NOTICE_ERROR = 'error';
|
26 |
-
|
27 |
-
/**
|
28 |
-
* Instantiate API client.
|
29 |
-
*
|
30 |
-
* @return Ga_Lib_Google_Api_Client|null
|
31 |
-
*/
|
32 |
-
public static function api_client( $type = '' ) {
|
33 |
-
if ( self::GA_SHARETHIS_API_ALIAS === $type ) {
|
34 |
-
$instance = Ga_Lib_Sharethis_Api_Client::get_instance();
|
35 |
-
} else {
|
36 |
-
$instance = Ga_Lib_Google_Api_Client::get_instance();
|
37 |
-
$token = Ga_Helper::get_option( self::GA_OAUTH_AUTH_TOKEN_OPTION_NAME );
|
38 |
-
try {
|
39 |
-
if ( ! empty( $token ) ) {
|
40 |
-
$token = json_decode( $token, true );
|
41 |
-
$instance->set_access_token( $token );
|
42 |
-
}
|
43 |
-
} catch ( Exception $e ) {
|
44 |
-
Ga_Helper::ga_oauth_notice( $e->getMessage() );
|
45 |
-
}
|
46 |
-
}
|
47 |
-
|
48 |
-
return $instance;
|
49 |
-
}
|
50 |
-
|
51 |
-
/**
|
52 |
-
* Initializes plugin's options during plugin activation process.
|
53 |
-
*/
|
54 |
-
public static function activate_googleanalytics() {
|
55 |
-
add_option( self::GA_WEB_PROPERTY_ID_OPTION_NAME, Ga_Helper::GA_DEFAULT_WEB_ID );
|
56 |
-
add_option( self::GA_EXCLUDE_ROLES_OPTION_NAME, wp_json_encode( array() ) );
|
57 |
-
add_option( self::GA_VERSION_OPTION_NAME );
|
58 |
-
add_option( self::GA_OAUTH_AUTH_CODE_OPTION_NAME );
|
59 |
-
add_option( self::GA_OAUTH_AUTH_TOKEN_OPTION_NAME );
|
60 |
-
add_option( self::GA_ACCOUNT_DATA_OPTION_NAME );
|
61 |
-
add_option( self::GA_SELECTED_ACCOUNT );
|
62 |
-
add_option( self::GA_WEB_PROPERTY_ID_MANUALLY_OPTION_NAME );
|
63 |
-
add_option( self::GA_WEB_PROPERTY_ID_MANUALLY_VALUE_OPTION_NAME );
|
64 |
-
add_option( self::GA_DISABLE_ALL_FEATURES );
|
65 |
-
Ga_Cache::add_cache_options();
|
66 |
-
}
|
67 |
-
|
68 |
-
/**
|
69 |
-
* Deletes plugin's options during plugin activation process.
|
70 |
-
*/
|
71 |
-
public static function deactivate_googleanalytics() {
|
72 |
-
delete_option( self::GA_WEB_PROPERTY_ID_OPTION_NAME );
|
73 |
-
delete_option( self::GA_EXCLUDE_ROLES_OPTION_NAME );
|
74 |
-
delete_option( self::GA_OAUTH_AUTH_CODE_OPTION_NAME );
|
75 |
-
delete_option( self::GA_OAUTH_AUTH_TOKEN_OPTION_NAME );
|
76 |
-
delete_option( self::GA_ACCOUNT_DATA_OPTION_NAME );
|
77 |
-
delete_option( self::GA_SELECTED_ACCOUNT );
|
78 |
-
delete_option( self::GA_WEB_PROPERTY_ID_MANUALLY_OPTION_NAME );
|
79 |
-
delete_option( self::GA_WEB_PROPERTY_ID_MANUALLY_VALUE_OPTION_NAME );
|
80 |
-
delete_option( self::GA_DISABLE_ALL_FEATURES );
|
81 |
-
delete_option( Ga_SupportLogger::LOG_OPTION );
|
82 |
-
delete_option('googleanalytics_gdpr_config');
|
83 |
-
delete_option('googleanalytics_demographic');
|
84 |
-
delete_option('googleanalytics_demo_data');
|
85 |
-
delete_option('googleanalytics_demo_date');
|
86 |
-
delete_option('googleanalytics_send_data');
|
87 |
-
delete_option('googleanalytics_hide_terms');
|
88 |
-
delete_option('googleanalytics_sharethis_terms');
|
89 |
-
delete_option('googleanalytics_sherethis_property_id');
|
90 |
-
delete_option('googleanalytics_sherethis_property_secret');
|
91 |
-
delete_option(self::GA_SHARETHIS_TERMS_OPTION_NAME );
|
92 |
-
Ga_Cache::delete_cache_options();
|
93 |
-
}
|
94 |
-
|
95 |
-
/**
|
96 |
-
* Deletes plugin's options during plugin uninstallation process.
|
97 |
-
*/
|
98 |
-
public static function uninstall_googleanalytics() {
|
99 |
-
delete_option( self::GA_SHARETHIS_TERMS_OPTION_NAME );
|
100 |
-
delete_option( self::GA_HIDE_TERMS_OPTION_NAME );
|
101 |
-
delete_option( self::GA_VERSION_OPTION_NAME );
|
102 |
-
delete_option( self::GA_SHARETHIS_PROPERTY_ID );
|
103 |
-
delete_option( self::GA_SHARETHIS_PROPERTY_SECRET );
|
104 |
-
delete_option( self::GA_SHARETHIS_VERIFICATION_RESULT );
|
105 |
-
}
|
106 |
-
|
107 |
-
/**
|
108 |
-
* Do actions during plugin load.
|
109 |
-
*/
|
110 |
-
public static function loaded_googleanalytics() {
|
111 |
-
self::update_googleanalytics();
|
112 |
-
}
|
113 |
-
|
114 |
-
/**
|
115 |
-
* Update hook fires when plugin is being loaded.
|
116 |
-
*/
|
117 |
-
public static function update_googleanalytics() {
|
118 |
-
$version = get_option( self::GA_VERSION_OPTION_NAME );
|
119 |
-
$installed_version = get_option( self::GA_VERSION_OPTION_NAME, '2.4.0' );
|
120 |
-
$old_property_value = Ga_Helper::get_option( 'web_property_id' );
|
121 |
-
|
122 |
-
if ( version_compare( $installed_version, GOOGLEANALYTICS_VERSION, 'eq' ) ) {
|
123 |
-
return;
|
124 |
-
}
|
125 |
-
|
126 |
-
if ( version_compare( $installed_version, GOOGLEANALYTICS_VERSION, 'lt' ) ) {
|
127 |
-
|
128 |
-
if ( ! empty( $old_property_value ) ) {
|
129 |
-
Ga_Helper::update_option( self::GA_WEB_PROPERTY_ID_MANUALLY_VALUE_OPTION_NAME, $old_property_value );
|
130 |
-
Ga_Helper::update_option( self::GA_WEB_PROPERTY_ID_MANUALLY_OPTION_NAME, 1 );
|
131 |
-
delete_option( 'web_property_id' );
|
132 |
-
}
|
133 |
-
}
|
134 |
-
|
135 |
-
update_option( self::GA_VERSION_OPTION_NAME, GOOGLEANALYTICS_VERSION );
|
136 |
-
}
|
137 |
-
|
138 |
-
public static function preupdate_exclude_roles( $new_value, $old_value ) {
|
139 |
-
if ( ! Ga_Helper::are_features_enabled() ) {
|
140 |
-
return '';
|
141 |
-
}
|
142 |
-
|
143 |
-
return wp_json_encode( $new_value );
|
144 |
-
}
|
145 |
-
|
146 |
-
/**
|
147 |
-
* Pre-update hook for preparing JSON structure.
|
148 |
-
*
|
149 |
-
* @param $new_value
|
150 |
-
* @param $old_value
|
151 |
-
*
|
152 |
-
* @return mixed
|
153 |
-
*/
|
154 |
-
public static function preupdate_selected_account( $new_value, $old_value ) {
|
155 |
-
$data = null;
|
156 |
-
if ( ! empty( $new_value ) ) {
|
157 |
-
$data = explode( '_', $new_value );
|
158 |
-
|
159 |
-
if ( ! empty( $data[1] ) ) {
|
160 |
-
Ga_Helper::update_option( self::GA_WEB_PROPERTY_ID_OPTION_NAME, $data[1] );
|
161 |
-
}
|
162 |
-
}
|
163 |
-
|
164 |
-
return wp_json_encode( $data );
|
165 |
-
}
|
166 |
-
|
167 |
-
public static function preupdate_disable_all_features( $new_value, $old_value ) {
|
168 |
-
if ( 'on' === $old_value ) {
|
169 |
-
Ga_Helper::update_option( self::GA_WEB_PROPERTY_ID_MANUALLY_OPTION_NAME, false );
|
170 |
-
}
|
171 |
-
|
172 |
-
return $new_value;
|
173 |
-
}
|
174 |
-
|
175 |
-
public static function preupdate_optimize_code( $new_value, $old_value ) {
|
176 |
-
if ( ! empty( $new_value ) ) {
|
177 |
-
$new_value = sanitize_text_field( wp_unslash( $new_value ) );
|
178 |
-
}
|
179 |
-
|
180 |
-
return $new_value;
|
181 |
-
}
|
182 |
-
|
183 |
-
public static function preupdate_ip_anonymization( $new_value, $old_value ) {
|
184 |
-
return $new_value;
|
185 |
-
}
|
186 |
-
|
187 |
-
/**
|
188 |
-
* Registers plugin's settings.
|
189 |
-
*/
|
190 |
-
public static function admin_init_googleanalytics() {
|
191 |
-
register_setting( GA_NAME, self::GA_WEB_PROPERTY_ID_OPTION_NAME );
|
192 |
-
register_setting( GA_NAME, self::GA_EXCLUDE_ROLES_OPTION_NAME );
|
193 |
-
register_setting( GA_NAME, self::GA_SELECTED_ACCOUNT );
|
194 |
-
register_setting( GA_NAME, self::GA_OAUTH_AUTH_CODE_OPTION_NAME );
|
195 |
-
register_setting( GA_NAME, self::GA_WEB_PROPERTY_ID_MANUALLY_OPTION_NAME );
|
196 |
-
register_setting( GA_NAME, self::GA_WEB_PROPERTY_ID_MANUALLY_VALUE_OPTION_NAME );
|
197 |
-
register_setting( GA_NAME, self::GA_DISABLE_ALL_FEATURES );
|
198 |
-
register_setting( GA_NAME, 'googleanalytics_optimize_code' );
|
199 |
-
register_setting( GA_NAME, 'googleanalytics_ip_anonymization' );
|
200 |
-
add_filter( 'pre_update_option_' . self::GA_EXCLUDE_ROLES_OPTION_NAME, 'Ga_Admin::preupdate_exclude_roles', 1, 2 );
|
201 |
-
add_filter( 'pre_update_option_' . self::GA_SELECTED_ACCOUNT, 'GA_Admin::preupdate_selected_account', 1, 2 );
|
202 |
-
add_filter( 'pre_update_option_googleanalytics_optimize_code', 'Ga_Admin::preupdate_optimize_code', 1, 2 );
|
203 |
-
add_filter( 'pre_update_option_googleanalytics_ip_anonymization', 'Ga_Admin::preupdate_ip_anonymization', 1, 2 );
|
204 |
-
}
|
205 |
-
|
206 |
-
/**
|
207 |
-
* Builds plugin's menu structure.
|
208 |
-
*/
|
209 |
-
public static function admin_menu_googleanalytics() {
|
210 |
-
$gdpr = get_option('googleanalytics_gdpr_config');
|
211 |
-
|
212 |
-
if ( current_user_can( 'manage_options' ) ) {
|
213 |
-
add_menu_page( 'Google Analytics', 'Google Analytics', 'manage_options', 'googleanalytics', 'Ga_Admin::statistics_page_googleanalytics', 'dashicons-chart-line', 1000 );
|
214 |
-
add_submenu_page( 'googleanalytics', 'Google Analytics', __( 'Dashboard' ), 'manage_options', 'googleanalytics', 'Ga_Admin::statistics_page_googleanalytics' );
|
215 |
-
add_submenu_page( 'googleanalytics', 'Google Analytics', __( 'Settings' ), 'manage_options', 'googleanalytics/settings', 'Ga_Admin::options_page_googleanalytics' );
|
216 |
-
|
217 |
-
if (!empty($gdpr)) {
|
218 |
-
add_submenu_page('googleanalytics', 'Google Analytics', __('GDPR'), 'manage_options',
|
219 |
-
'googleanalytics/gdpr', 'Ga_Admin::gdpr_page_googleanalytics');
|
220 |
-
}
|
221 |
-
}
|
222 |
-
}
|
223 |
-
|
224 |
-
/**
|
225 |
-
* Prepares and displays plugin's stats page.
|
226 |
-
*/
|
227 |
-
public static function statistics_page_googleanalytics() {
|
228 |
-
|
229 |
-
if ( ! Ga_Helper::is_wp_version_valid() || ! Ga_Helper::is_php_version_valid() ) {
|
230 |
-
return false;
|
231 |
-
}
|
232 |
-
|
233 |
-
$data = self::get_stats_page();
|
234 |
-
Ga_View_Core::load(
|
235 |
-
'statistics',
|
236 |
-
array(
|
237 |
-
'data' => $data,
|
238 |
-
)
|
239 |
-
);
|
240 |
-
|
241 |
-
if ( Ga_Cache::is_data_cache_outdated( '', Ga_Helper::get_account_id() ) ) {
|
242 |
-
self::api_client()->add_own_error( '1', __( 'Saved data is shown, it will be refreshed soon' ), 'Ga_Data_Outdated_Exception' );
|
243 |
-
}
|
244 |
-
|
245 |
-
self::display_api_errors();
|
246 |
-
}
|
247 |
-
|
248 |
-
/**
|
249 |
-
* Prepares and displays plugin's settings page.
|
250 |
-
*/
|
251 |
-
public static function options_page_googleanalytics() {
|
252 |
-
|
253 |
-
if ( ! Ga_Helper::is_wp_version_valid() || ! Ga_Helper::is_php_version_valid() ) {
|
254 |
-
return false;
|
255 |
-
}
|
256 |
-
if ( Ga_Helper::are_features_enabled() && Ga_Helper::is_curl_disabled() ) {
|
257 |
-
echo wp_kses_post( Ga_Helper::ga_wp_notice( __( 'Looks like cURL is not configured on your server. In order to authenticate your Google Analytics account and display statistics, cURL is required. Please contact your server administrator to enable it, or manually enter your Tracking ID.' ), 'warning' ) );
|
258 |
-
}
|
259 |
-
/**
|
260 |
-
* Keeps data to be extracted as variables in the view.
|
261 |
-
*
|
262 |
-
* @var array $data
|
263 |
-
*/
|
264 |
-
$data = array();
|
265 |
-
|
266 |
-
$data[ self::GA_WEB_PROPERTY_ID_OPTION_NAME ] = get_option( self::GA_WEB_PROPERTY_ID_OPTION_NAME );
|
267 |
-
$data[ self::GA_WEB_PROPERTY_ID_MANUALLY_VALUE_OPTION_NAME ] = get_option( self::GA_WEB_PROPERTY_ID_MANUALLY_VALUE_OPTION_NAME );
|
268 |
-
$data[ self::GA_WEB_PROPERTY_ID_MANUALLY_OPTION_NAME ] = get_option( self::GA_WEB_PROPERTY_ID_MANUALLY_OPTION_NAME );
|
269 |
-
$data[ self::GA_DISABLE_ALL_FEATURES ] = get_option( self::GA_DISABLE_ALL_FEATURES );
|
270 |
-
|
271 |
-
$roles = Ga_Helper::get_user_roles();
|
272 |
-
$saved = json_decode( get_option( self::GA_EXCLUDE_ROLES_OPTION_NAME ), true );
|
273 |
-
|
274 |
-
$tmp = array();
|
275 |
-
if ( ! empty( $roles ) ) {
|
276 |
-
foreach ( $roles as $role ) {
|
277 |
-
$role_id = Ga_Helper::prepare_role_id( $role );
|
278 |
-
$tmp[] = array(
|
279 |
-
'name' => $role,
|
280 |
-
'id' => $role_id,
|
281 |
-
'checked' => ( ! empty( $saved[ $role_id ] ) && 'on' === $saved[ $role_id ] ),
|
282 |
-
);
|
283 |
-
}
|
284 |
-
}
|
285 |
-
$data['roles'] = $tmp;
|
286 |
-
|
287 |
-
if ( Ga_Helper::is_authorized() ) {
|
288 |
-
$data['ga_accounts_selector'] = self::get_accounts_selector();
|
289 |
-
$data['auth_button'] = self::get_auth_button( 'reauth' );
|
290 |
-
} else {
|
291 |
-
$data['popup_url'] = self::get_auth_popup_url();
|
292 |
-
$data['auth_button'] = self::get_auth_button( 'auth' );
|
293 |
-
}
|
294 |
-
$data['debug_modal'] = self::get_debug_modal();
|
295 |
-
$data['debug_info'] = Ga_SupportLogger::$debug_info;
|
296 |
-
|
297 |
-
if ( ! empty( $_GET['err'] ) ) { // WPCS: CSRF ok.
|
298 |
-
switch ( $_GET['err'] ) { // WPCS: CSRF ok.
|
299 |
-
case 1:
|
300 |
-
$data['error_message'] = Ga_Helper::ga_oauth_notice( 'There was a problem with Google Oauth2 authentication process. Please verify your site has a valid SSL Certificate in place and is using the HTTPS protocol.' );
|
301 |
-
break;
|
302 |
-
case 2:
|
303 |
-
$data['error_message'] = Ga_Helper::ga_wp_notice( 'Authentication code is incorrect.', 'error', true );
|
304 |
-
break;
|
305 |
-
}
|
306 |
-
}
|
307 |
-
Ga_View_Core::load(
|
308 |
-
'page',
|
309 |
-
array(
|
310 |
-
'data' => $data,
|
311 |
-
'tooltip' => Ga_Helper::get_tooltip(),
|
312 |
-
)
|
313 |
-
);
|
314 |
-
|
315 |
-
self::display_api_errors();
|
316 |
-
}
|
317 |
-
|
318 |
-
/**
|
319 |
-
* Prepares and displays plugin's gdpr page.
|
320 |
-
*/
|
321 |
-
public static function gdpr_page_googleanalytics() {
|
322 |
-
|
323 |
-
if ( ! Ga_Helper::is_wp_version_valid() || ! Ga_Helper::is_php_version_valid() ) {
|
324 |
-
return false;
|
325 |
-
}
|
326 |
-
if ( Ga_Helper::are_features_enabled() && Ga_Helper::is_curl_disabled() ) {
|
327 |
-
echo wp_kses_post( Ga_Helper::ga_wp_notice( __( 'Looks like cURL is not configured on your server. In order to authenticate your Google Analytics account and display statistics, cURL is required. Please contact your server administrator to enable it, or manually enter your Tracking ID.' ), 'warning' ) );
|
328 |
-
}
|
329 |
-
|
330 |
-
$vendor_data = self::getVendors();
|
331 |
-
$vendors = $vendor_data['vendors'];
|
332 |
-
$purposes = array_column($vendor_data['purposes'], 'name', 'id');
|
333 |
-
|
334 |
-
include plugin_dir_path(__FILE__) . '../view/templates/gdpr-config.php';
|
335 |
-
}
|
336 |
-
|
337 |
-
/**
|
338 |
-
* Prepares and returns a plugin's URL to be opened in a popup window
|
339 |
-
* during Google authentication process.
|
340 |
-
*
|
341 |
-
* @return mixed
|
342 |
-
*/
|
343 |
-
public static function get_auth_popup_url() {
|
344 |
-
return admin_url( Ga_Helper::create_url( Ga_Helper::GA_SETTINGS_PAGE_URL, array( Ga_Controller_Core::ACTION_PARAM_NAME => 'ga_action_auth' ) ) );
|
345 |
-
}
|
346 |
-
|
347 |
-
/**
|
348 |
-
* Prepares and returns Google Account's dropdown code.
|
349 |
-
*
|
350 |
-
* @return string
|
351 |
-
*/
|
352 |
-
public static function get_accounts_selector() {
|
353 |
-
$selected = Ga_Helper::get_selected_account_data();
|
354 |
-
$selector = json_decode( get_option( self::GA_ACCOUNT_DATA_OPTION_NAME ), true );
|
355 |
-
if ( ! Ga_Helper::is_code_manually_enabled() && empty( $selector ) ) {
|
356 |
-
echo wp_kses_post( Ga_Helper::ga_wp_notice( "Hi there! It seems like we weren't able to locate a Google Analytics account attached to your email account. Can you please register for Google Analytics and then deactivate and reactivate the plugin?", 'warning' ) );
|
357 |
-
}
|
358 |
-
|
359 |
-
return Ga_View_Core::load(
|
360 |
-
'ga_accounts_selector',
|
361 |
-
array(
|
362 |
-
'selector' => $selector,
|
363 |
-
'selected' => $selected ? implode( '_', $selected ) : null,
|
364 |
-
'add_manually_enabled' => Ga_Helper::is_code_manually_enabled() || Ga_Helper::is_all_feature_disabled(),
|
365 |
-
),
|
366 |
-
true
|
367 |
-
);
|
368 |
-
}
|
369 |
-
|
370 |
-
/**
|
371 |
-
* Adds JS scripts for the settings page.
|
372 |
-
*/
|
373 |
-
public static function enqueue_ga_scripts() {
|
374 |
-
$property_id = get_option( 'googleanalytics_sherethis_property_id', true );
|
375 |
-
$secret = get_option( 'googleanalytics_sherethis_property_secret', true );
|
376 |
-
$config = wp_json_encode(get_option('googleanalytics_gdpr_config'));
|
377 |
-
|
378 |
-
wp_register_script(
|
379 |
-
GA_NAME . '-page-js',
|
380 |
-
Ga_Helper::get_plugin_url_with_correct_protocol() . '/js/' . GA_NAME . '_page.js',
|
381 |
-
[ 'jquery' ],
|
382 |
-
time(),
|
383 |
-
false
|
384 |
-
);
|
385 |
-
|
386 |
-
wp_enqueue_script(GA_NAME . '-page-js');
|
387 |
-
wp_add_inline_script(
|
388 |
-
GA_NAME . '-page-js',
|
389 |
-
'var siteAdminUrl = \'' .
|
390 |
-
admin_url() .
|
391 |
-
'\'; var gaGdprConfig = \''.
|
392 |
-
$config .
|
393 |
-
'\'; var ga_demo_nonce = "' .
|
394 |
-
wp_create_nonce('ga_demo_nonce') .
|
395 |
-
'"; var ga_property_id = "' . $property_id .
|
396 |
-
'"; var ga_secret_id = "' .
|
397 |
-
$secret .
|
398 |
-
'";'
|
399 |
-
);
|
400 |
-
}
|
401 |
-
|
402 |
-
/**
|
403 |
-
* Adds CSS plugin's scripts.
|
404 |
-
*/
|
405 |
-
public static function enqueue_ga_css() {
|
406 |
-
wp_register_style( GA_NAME . '-css', Ga_Helper::get_plugin_url_with_correct_protocol() . '/css/' . GA_NAME . '.css', false, time(), 'all' );
|
407 |
-
wp_register_style( GA_NAME . '-additional-css', Ga_Helper::get_plugin_url_with_correct_protocol() . '/css/ga_additional.css', false, GOOGLEANALYTICS_VERSION, 'all' );
|
408 |
-
wp_enqueue_style( GA_NAME . '-css');
|
409 |
-
wp_enqueue_style( GA_NAME . '-additional-css' );
|
410 |
-
if ( Ga_Helper::is_wp_old() ) {
|
411 |
-
wp_register_style( GA_NAME . '-old-wp-support-css', Ga_Helper::get_plugin_url_with_correct_protocol() . '/css/ga_old_wp_support.css', false, GOOGLEANALYTICS_VERSION, 'all' );
|
412 |
-
wp_enqueue_style( GA_NAME . '-old-wp-support-css' );
|
413 |
-
}
|
414 |
-
wp_register_style( GA_NAME . '-modal-css', Ga_Helper::get_plugin_url_with_correct_protocol() . '/css/ga_modal.css', false, GOOGLEANALYTICS_VERSION, 'all' );
|
415 |
-
wp_enqueue_style( GA_NAME . '-modal-css' );
|
416 |
-
}
|
417 |
-
|
418 |
-
/**
|
419 |
-
* Enqueues dashboard JS scripts.
|
420 |
-
*/
|
421 |
-
private static function enqueue_dashboard_scripts() {
|
422 |
-
wp_register_script(
|
423 |
-
GA_NAME . '-dashboard-js',
|
424 |
-
Ga_Helper::get_plugin_url_with_correct_protocol() . '/js/' . GA_NAME . '_dashboard.js',
|
425 |
-
[ 'jquery' ],
|
426 |
-
GOOGLEANALYTICS_VERSION,
|
427 |
-
false
|
428 |
-
);
|
429 |
-
wp_enqueue_script( GA_NAME . '-dashboard-js' );
|
430 |
-
}
|
431 |
-
|
432 |
-
/**
|
433 |
-
* Enqueues plugin's JS and CSS scripts.
|
434 |
-
*/
|
435 |
-
public static function enqueue_scripts() {
|
436 |
-
$domain = str_replace('http://','', str_replace('https://', '', str_replace( '/wp-admin/', '', admin_url() )));
|
437 |
-
$st_prop = get_option(self::GA_SHARETHIS_PROPERTY_ID);
|
438 |
-
$st_secret = get_option(self::GA_SHARETHIS_PROPERTY_SECRET);
|
439 |
-
|
440 |
-
if ( Ga_Helper::is_dashboard_page() || Ga_Helper::is_plugin_page() ) {
|
441 |
-
wp_register_script(
|
442 |
-
GA_NAME . '-js',
|
443 |
-
Ga_Helper::get_plugin_url_with_correct_protocol() . '/js/' . GA_NAME . '.js',
|
444 |
-
[ 'jquery' ],
|
445 |
-
GOOGLEANALYTICS_VERSION,
|
446 |
-
false
|
447 |
-
);
|
448 |
-
wp_enqueue_script( GA_NAME . '-js' );
|
449 |
-
|
450 |
-
wp_register_script( 'googlecharts', 'https://www.gstatic.com/charts/loader.js', null, 1, false );
|
451 |
-
wp_enqueue_script( 'googlecharts' );
|
452 |
-
wp_add_inline_script(GA_NAME . '-js', 'var ga_demo_nonce = "' . wp_create_nonce('ga_demo_nonce') . '";');
|
453 |
-
|
454 |
-
if ( empty($st_prop) || empty($st_secret) ) {
|
455 |
-
wp_register_script( 'googlecreateprop', Ga_Helper::get_plugin_url_with_correct_protocol() . '/js/googleanalytics_createprop.js', ['jquery', 'wp-util'], time(), false );
|
456 |
-
wp_enqueue_script('googlecreateprop');
|
457 |
-
wp_add_inline_script('googlecreateprop', '
|
458 |
-
var gaNonce = "' . wp_create_nonce('googleanalyticsnonce') . '";
|
459 |
-
var gasiteURL = "' . $domain . '";
|
460 |
-
var gaAdminEmail = "' . get_option('admin_email') . '";'
|
461 |
-
);
|
462 |
-
}
|
463 |
-
|
464 |
-
self::enqueue_ga_css();
|
465 |
-
}
|
466 |
-
|
467 |
-
if ( Ga_Helper::is_dashboard_page() ) {
|
468 |
-
self::enqueue_dashboard_scripts();
|
469 |
-
}
|
470 |
-
|
471 |
-
if ( Ga_Helper::is_plugin_page() ) {
|
472 |
-
self::enqueue_ga_scripts();
|
473 |
-
}
|
474 |
-
}
|
475 |
-
|
476 |
-
/**
|
477 |
-
* Prepares plugin's statistics page and return HTML code.
|
478 |
-
*
|
479 |
-
* @return string HTML code
|
480 |
-
*/
|
481 |
-
public static function get_stats_page() {
|
482 |
-
$age_chart = null;
|
483 |
-
$boxes = null;
|
484 |
-
$chart = null;
|
485 |
-
$device_chart = null;
|
486 |
-
$gender_chart = null;
|
487 |
-
$labels = null;
|
488 |
-
$sources = null;
|
489 |
-
|
490 |
-
if ( Ga_Helper::is_authorized() && Ga_Helper::is_account_selected() && ! Ga_Helper::is_all_feature_disabled() ) {
|
491 |
-
list( $chart, $age_chart, $device_chart, $gender_chart, $boxes, $labels, $sources ) = self::generate_stats_data();
|
492 |
-
}
|
493 |
-
|
494 |
-
return Ga_Helper::get_chart_page(
|
495 |
-
'stats',
|
496 |
-
compact(
|
497 |
-
'age_chart',
|
498 |
-
'boxes',
|
499 |
-
'chart',
|
500 |
-
'device_chart',
|
501 |
-
'gender_chart',
|
502 |
-
'labels',
|
503 |
-
'sources'
|
504 |
-
)
|
505 |
-
);
|
506 |
-
}
|
507 |
-
|
508 |
-
/**
|
509 |
-
* Shows plugin's notice on the admin area.
|
510 |
-
*/
|
511 |
-
public static function admin_notice_googleanalytics() {
|
512 |
-
if ( (!get_option( self::GA_SHARETHIS_TERMS_OPTION_NAME ) && Ga_Helper::is_plugin_page() ) || (!get_option( self::GA_SHARETHIS_TERMS_OPTION_NAME ) && !get_option( self::GA_HIDE_TERMS_OPTION_NAME ) ) ) {
|
513 |
-
$current_url = Ga_Helper::get_current_url();
|
514 |
-
$url = ( strstr( $current_url, '?' ) ? $current_url . '&' : $current_url . '?' ) . http_build_query( array( Ga_Controller_Core::ACTION_PARAM_NAME => 'ga_action_update_terms' ) );
|
515 |
-
Ga_View_Core::load( 'ga_notice', array(
|
516 |
-
'url' => $url
|
517 |
-
) );
|
518 |
-
}
|
519 |
-
|
520 |
-
if ( !empty( $_GET[ 'settings-updated' ] ) && Ga_Helper::is_plugin_page() ) {
|
521 |
-
echo Ga_Helper::ga_wp_notice( _( 'Settings saved' ), self::NOTICE_SUCCESS );
|
522 |
-
}
|
523 |
-
|
524 |
-
if ( Ga_Helper::get_option( self::GA_DISABLE_ALL_FEATURES ) ) {
|
525 |
-
echo Ga_Helper::ga_wp_notice(
|
526 |
-
__( 'You have disabled all extra features, click here to enable Dashboards, Viral Alerts and Google API.' ),
|
527 |
-
'warning',
|
528 |
-
false,
|
529 |
-
array(
|
530 |
-
'url' => admin_url( Ga_Helper::create_url( Ga_Helper::GA_SETTINGS_PAGE_URL, array( Ga_Controller_Core::ACTION_PARAM_NAME => 'ga_action_enable_all_features' ) ) ),
|
531 |
-
'label' => __( 'Enable' ),
|
532 |
-
)
|
533 |
-
);
|
534 |
-
}
|
535 |
-
}
|
536 |
-
|
537 |
-
/**
|
538 |
-
* Prepare required PHP version warning.
|
539 |
-
* @return string
|
540 |
-
*/
|
541 |
-
public static function admin_notice_googleanalytics_php_version() {
|
542 |
-
echo wp_kses_post( Ga_Helper::ga_wp_notice( 'Cannot use Google Analytics plugin. PHP version ' . phpversion() . ' is to low. Required PHP version: ' . Ga_Helper::PHP_VERSION_REQUIRED, 'error' ) );
|
543 |
-
}
|
544 |
-
|
545 |
-
/**
|
546 |
-
* Prepare required WP version warning
|
547 |
-
* @return string
|
548 |
-
*/
|
549 |
-
public static function admin_notice_googleanalytics_wp_version() {
|
550 |
-
echo Ga_Helper::ga_wp_notice( 'Google Analytics plugin requires at least WordPress version ' . self::MIN_WP_VERSION, 'error' );
|
551 |
-
}
|
552 |
-
|
553 |
-
/**
|
554 |
-
* Hides plugin's notice
|
555 |
-
*/
|
556 |
-
public static function admin_notice_hide_googleanalytics() {
|
557 |
-
update_option( self::GA_HIDE_TERMS_OPTION_NAME, true );
|
558 |
-
}
|
559 |
-
|
560 |
-
/**
|
561 |
-
* Adds GA dashboard widget only for administrators.
|
562 |
-
*/
|
563 |
-
public static function add_dashboard_device_widget() {
|
564 |
-
if ( Ga_Helper::is_administrator() ) {
|
565 |
-
wp_add_dashboard_widget( 'ga_dashboard_widget', __( 'Google Analytics Dashboard' ), 'Ga_Helper::add_ga_dashboard_widget' );
|
566 |
-
}
|
567 |
-
}
|
568 |
-
|
569 |
-
/**
|
570 |
-
* Adds plugin's actions
|
571 |
-
*/
|
572 |
-
public static function add_actions() {
|
573 |
-
add_action( 'admin_init', 'Ga_Admin::admin_init_googleanalytics' );
|
574 |
-
add_action( 'admin_menu', 'Ga_Admin::admin_menu_googleanalytics' );
|
575 |
-
add_action( 'admin_enqueue_scripts', 'Ga_Admin::enqueue_scripts' );
|
576 |
-
add_action( 'wp_dashboard_setup', 'Ga_Admin::add_dashboard_device_widget' );
|
577 |
-
add_action( 'wp_ajax_ga_ajax_data_change', 'Ga_Admin::ga_ajax_data_change' );
|
578 |
-
add_action( 'wp_ajax_ga_ajax_hide_review', 'Ga_Admin::ga_ajax_hide_review' );
|
579 |
-
add_action( 'wp_ajax_ga_ajax_enable_gdpr', 'Ga_Admin::gaAjaxGdprEnable' );
|
580 |
-
add_action( 'wp_ajax_ga_ajax_enable_demographic', 'Ga_Admin::gaAjaxEnableDemo' );
|
581 |
-
add_action( 'admin_notices', 'Ga_Admin::admin_notice_googleanalytics' );
|
582 |
-
add_action( 'heartbeat_tick', 'Ga_Admin::run_heartbeat_jobs' );
|
583 |
-
add_action( 'wp_ajax_googleanalytics_send_debug_email', 'Ga_SupportLogger::send_email' );
|
584 |
-
add_action( 'wp_ajax_set_ga_credentials', 'Ga_Admin::createGAProperty' );
|
585 |
-
|
586 |
-
if ( !get_option( self::GA_SHARETHIS_TERMS_OPTION_NAME ) && !get_option( self::GA_HIDE_TERMS_OPTION_NAME ) ) {
|
587 |
-
add_action( 'wp_ajax_googleanalytics_hide_terms', 'Ga_Admin::admin_notice_hide_googleanalytics' );
|
588 |
-
}
|
589 |
-
}
|
590 |
-
|
591 |
-
/**
|
592 |
-
* Runs jobs
|
593 |
-
*
|
594 |
-
* @param $response
|
595 |
-
* @param $screen_id
|
596 |
-
*/
|
597 |
-
public static function run_heartbeat_jobs( $response, $screen_id = '' ) {
|
598 |
-
|
599 |
-
if ( self::GA_HEARTBEAT_API_CACHE_UPDATE ) {
|
600 |
-
// Disable cache for ajax request
|
601 |
-
self::api_client()->set_disable_cache( true );
|
602 |
-
|
603 |
-
// Try to regenerate cache if needed
|
604 |
-
self::generate_stats_data();
|
605 |
-
}
|
606 |
-
}
|
607 |
-
|
608 |
-
/**
|
609 |
-
* Adds plugin's filters
|
610 |
-
*/
|
611 |
-
public static function add_filters() {
|
612 |
-
add_filter( 'plugin_action_links', 'Ga_Admin::ga_action_links', 10, 5 );
|
613 |
-
}
|
614 |
-
|
615 |
-
/**
|
616 |
-
* Adds new action links on the plugin list.
|
617 |
-
*
|
618 |
-
* @param $actions
|
619 |
-
* @param $plugin_file
|
620 |
-
*
|
621 |
-
* @return mixed
|
622 |
-
*/
|
623 |
-
public static function ga_action_links( $actions, $plugin_file ) {
|
624 |
-
|
625 |
-
if ( basename( $plugin_file ) === GA_NAME . '.php' ) {
|
626 |
-
array_unshift( $actions, '<a href="' . esc_url( get_admin_url( null, Ga_Helper::GA_SETTINGS_PAGE_URL ) ) . '">' . __( 'Settings' ) . '</a>' );
|
627 |
-
}
|
628 |
-
|
629 |
-
return $actions;
|
630 |
-
}
|
631 |
-
|
632 |
-
public static function init_oauth() {
|
633 |
-
|
634 |
-
$code = Ga_Helper::get_option( self::GA_OAUTH_AUTH_CODE_OPTION_NAME );
|
635 |
-
|
636 |
-
if ( ! empty( $code ) ) {
|
637 |
-
Ga_Helper::update_option( self::GA_OAUTH_AUTH_CODE_OPTION_NAME, '' );
|
638 |
-
|
639 |
-
// Get access token
|
640 |
-
$response = self::api_client()->call( 'ga_auth_get_access_token', $code );
|
641 |
-
if ( empty( $response ) ) {
|
642 |
-
return false;
|
643 |
-
}
|
644 |
-
$param = '';
|
645 |
-
if ( ! self::save_access_token( $response ) ) {
|
646 |
-
$param = '&err=1';
|
647 |
-
$errors = self::api_client()->get_errors();
|
648 |
-
if ( ! empty( $errors ) ) {
|
649 |
-
foreach ( $errors as $error ) {
|
650 |
-
if ( 'invalid_grant' === $error['message'] ) {
|
651 |
-
$param = '&err=2';
|
652 |
-
}
|
653 |
-
}
|
654 |
-
}
|
655 |
-
} else {
|
656 |
-
self::api_client()->set_access_token( $response->getData() );
|
657 |
-
// Get accounts data
|
658 |
-
$account_summaries = self::api_client()->call( 'ga_api_account_summaries' );
|
659 |
-
self::save_ga_account_summaries( $account_summaries->getData() );
|
660 |
-
update_option( self::GA_SELECTED_ACCOUNT, '' );
|
661 |
-
}
|
662 |
-
|
663 |
-
wp_safe_redirect( admin_url( Ga_Helper::GA_SETTINGS_PAGE_URL . $param ) );
|
664 |
-
}
|
665 |
-
}
|
666 |
-
|
667 |
-
/**
|
668 |
-
* Save access token.
|
669 |
-
*
|
670 |
-
* @param Ga_Lib_Api_Response $response
|
671 |
-
*
|
672 |
-
* @return boolean
|
673 |
-
*/
|
674 |
-
public static function save_access_token( $response, $refresh_token = '' ) {
|
675 |
-
$access_token = $response->getData();
|
676 |
-
if ( ! empty( $access_token ) ) {
|
677 |
-
$access_token['created'] = time();
|
678 |
-
} else {
|
679 |
-
return false;
|
680 |
-
}
|
681 |
-
|
682 |
-
if ( ! empty( $refresh_token ) ) {
|
683 |
-
$access_token['refresh_token'] = $refresh_token;
|
684 |
-
}
|
685 |
-
|
686 |
-
return update_option( self::GA_OAUTH_AUTH_TOKEN_OPTION_NAME, wp_json_encode( $access_token ) );
|
687 |
-
}
|
688 |
-
|
689 |
-
/**
|
690 |
-
* Saves Google Analytics account data.
|
691 |
-
*
|
692 |
-
* @param $data
|
693 |
-
*
|
694 |
-
* @return array
|
695 |
-
*/
|
696 |
-
public static function save_ga_account_summaries( $data ) {
|
697 |
-
$return = array();
|
698 |
-
if ( ! empty( $data['items'] ) ) {
|
699 |
-
foreach ( $data['items'] as $item ) {
|
700 |
-
$tmp = array();
|
701 |
-
$tmp['id'] = $item['id'];
|
702 |
-
$tmp['name'] = $item['name'];
|
703 |
-
if ( is_array( $item['webProperties'] ) ) {
|
704 |
-
foreach ( $item['webProperties'] as $property ) {
|
705 |
-
$profiles = array();
|
706 |
-
if ( is_array( $property['profiles'] ) ) {
|
707 |
-
foreach ( $property['profiles'] as $profile ) {
|
708 |
-
$profiles[] = array(
|
709 |
-
'id' => $profile['id'],
|
710 |
-
'name' => $profile['name'],
|
711 |
-
);
|
712 |
-
}
|
713 |
-
}
|
714 |
-
|
715 |
-
$tmp['webProperties'][] = array(
|
716 |
-
'internalWebPropertyId' => $property['internalWebPropertyId'],
|
717 |
-
'webPropertyId' => $property['id'],
|
718 |
-
'name' => $property['name'],
|
719 |
-
'profiles' => $profiles,
|
720 |
-
);
|
721 |
-
}
|
722 |
-
}
|
723 |
-
|
724 |
-
$return[] = $tmp;
|
725 |
-
}
|
726 |
-
|
727 |
-
update_option( self::GA_ACCOUNT_DATA_OPTION_NAME, wp_json_encode( $return ) );
|
728 |
-
} else {
|
729 |
-
update_option( self::GA_ACCOUNT_DATA_OPTION_NAME, '' );
|
730 |
-
}
|
731 |
-
update_option( self::GA_WEB_PROPERTY_ID_OPTION_NAME, '' );
|
732 |
-
|
733 |
-
return $return;
|
734 |
-
}
|
735 |
-
|
736 |
-
/**
|
737 |
-
* Handle AJAX data for the GA dashboard widget.
|
738 |
-
*/
|
739 |
-
public static function ga_ajax_data_change() {
|
740 |
-
if ( Ga_Admin_Controller::validate_ajax_data_change_post( $_POST ) ) {
|
741 |
-
$date_range = ! empty( $_POST['date_range'] ) ? $_POST['date_range'] : null; // WPCS: CSRF ok.
|
742 |
-
$metric = ! empty( $_POST['metric'] ) ? $_POST['metric'] : null; // WPCS: CSRF ok.
|
743 |
-
echo wp_kses_post( Ga_Helper::get_ga_dashboard_widget_data_json( $date_range, $metric, false, true ) );
|
744 |
-
} else {
|
745 |
-
echo wp_json_encode( array( 'error' => __( 'Invalid request.' ) ) );
|
746 |
-
}
|
747 |
-
|
748 |
-
wp_die();
|
749 |
-
}
|
750 |
-
|
751 |
-
/**
|
752 |
-
* Displays API error messages.
|
753 |
-
*/
|
754 |
-
public static function display_api_errors( $alias = '' ) {
|
755 |
-
$errors = self::api_client( $alias )->get_errors();
|
756 |
-
if ( ! empty( $errors ) ) {
|
757 |
-
foreach ( $errors as $error ) {
|
758 |
-
echo wp_kses_post( Ga_Notice::get_message( $error ) );
|
759 |
-
}
|
760 |
-
}
|
761 |
-
}
|
762 |
-
|
763 |
-
/**
|
764 |
-
* Gets dashboard data.
|
765 |
-
*
|
766 |
-
* @return array
|
767 |
-
*/
|
768 |
-
public static function generate_stats_data() {
|
769 |
-
$selected = Ga_Helper::get_selected_account_data( true );
|
770 |
-
$update_data = self::checkDataDate();
|
771 |
-
|
772 |
-
$current_period = Ga_Helper::getDateRangeFromRequest();
|
773 |
-
|
774 |
-
$current_period['start'] = $current_period['from'] ?: date('Y-m-d', strtotime('-1 week'));
|
775 |
-
$current_period['end'] = $current_period['to'] ?: date('Y-m-d', strtotime('now'));
|
776 |
-
|
777 |
-
$previous_period = Ga_Helper::getPreviousPeriodForDates($current_period['start'], $current_period['end']);
|
778 |
-
|
779 |
-
$period_in_days = Ga_Helper::getPeriodInDays($current_period['start'], $current_period['end']);
|
780 |
-
|
781 |
-
$date_ranges = Ga_Stats::set_date_ranges(
|
782 |
-
$current_period['start'],
|
783 |
-
$current_period['end'],
|
784 |
-
$previous_period['start'],
|
785 |
-
$previous_period['end']
|
786 |
-
);
|
787 |
-
|
788 |
-
$query_params = Ga_Stats::get_query( 'main_chart', $selected['view_id'], $date_ranges );
|
789 |
-
$stats_data = self::api_client()->call(
|
790 |
-
'ga_api_data',
|
791 |
-
[ $query_params ]
|
792 |
-
);
|
793 |
-
$gender_params = Ga_Stats::get_query( 'gender', $selected['view_id'], $date_ranges );
|
794 |
-
$gender_data = self::api_client()->call(
|
795 |
-
'ga_api_data',
|
796 |
-
[$gender_params]
|
797 |
-
);
|
798 |
-
$age_params = Ga_Stats::get_query( 'age', $selected['view_id'], $date_ranges );
|
799 |
-
$age_data = self::api_client()->call(
|
800 |
-
'ga_api_data',
|
801 |
-
[$age_params]
|
802 |
-
);
|
803 |
-
$device_params = Ga_Stats::get_query( 'device', $selected['view_id'], $date_ranges );
|
804 |
-
$device_data = self::api_client()->call(
|
805 |
-
'ga_api_data',
|
806 |
-
[ $device_params ]
|
807 |
-
);
|
808 |
-
|
809 |
-
$boxes_data = self::api_client()->call(
|
810 |
-
'ga_api_data',
|
811 |
-
[ Ga_Stats::get_query( 'boxes', $selected['view_id'] ) ]
|
812 |
-
);
|
813 |
-
$sources_data = self::api_client()->call(
|
814 |
-
'ga_api_data',
|
815 |
-
[ Ga_Stats::get_query( 'sources', $selected['view_id'] ) ]
|
816 |
-
);
|
817 |
-
|
818 |
-
$chart = ! empty( $stats_data ) ? Ga_Stats::get_chart( $stats_data->getData(), $period_in_days ) : array();
|
819 |
-
$device_chart = false === empty( $device_data ) ? Ga_Stats::get_device_chart( $device_data->getData() ) : array();
|
820 |
-
$gender_chart = ! empty( $gender_data ) ? Ga_Stats::get_gender_chart( $gender_data->getData() ) : [];
|
821 |
-
$age_chart = ! empty( $age_data ) ? Ga_Stats::get_age_chart( $age_data->getData() ) : [];
|
822 |
-
$boxes = ! empty( $boxes_data ) ? Ga_Stats::get_boxes( $boxes_data->getData() ) : array();
|
823 |
-
$last_chart_date = ! empty( $chart ) ? $chart['date'] : strtotime( 'now' );
|
824 |
-
|
825 |
-
unset( $chart['date'] );
|
826 |
-
$labels = array(
|
827 |
-
'thisWeek' => date( 'M d, Y', strtotime( '-6 day', $last_chart_date ) ) . ' - ' . date( 'M d, Y', $last_chart_date ),
|
828 |
-
'thisMonth' => date( 'M d, Y', strtotime( '-29 day', $last_chart_date ) ) . ' - ' . date( 'M d, Y', $last_chart_date ),
|
829 |
-
);
|
830 |
-
$sources = ! empty( $sources_data ) ? Ga_Stats::get_sources( $sources_data->getData() ) : array();
|
831 |
-
|
832 |
-
// Add gender/age data for default period (1 week ago vs 2 weeks ago).
|
833 |
-
if ($update_data) {
|
834 |
-
$gender_params = Ga_Stats::get_query( 'gender', $selected['view_id'] );
|
835 |
-
$gender_data = self::api_client()->call(
|
836 |
-
'ga_api_data',
|
837 |
-
[$gender_params]
|
838 |
-
);
|
839 |
-
$age_params = Ga_Stats::get_query( 'age', $selected['view_id'] );
|
840 |
-
$age_data = self::api_client()->call(
|
841 |
-
'ga_api_data',
|
842 |
-
[$age_params]
|
843 |
-
);
|
844 |
-
|
845 |
-
$gender_chart = ! empty($gender_data) ? Ga_Stats::get_gender_chart($gender_data->getData()) : [];
|
846 |
-
$age_chart = ! empty($age_data) ? Ga_Stats::get_age_chart($age_data->getData()) : [];
|
847 |
-
|
848 |
-
self::updateDemoData(
|
849 |
-
$gender_chart,
|
850 |
-
$age_chart
|
851 |
-
);
|
852 |
-
}
|
853 |
-
|
854 |
-
return [$chart, $age_chart, $device_chart, $gender_chart, $boxes, $labels, $sources];
|
855 |
-
}
|
856 |
-
|
857 |
-
private static function updateDemoData($gender_response = false, $age_response = false)
|
858 |
-
{
|
859 |
-
$x = 0;
|
860 |
-
$demoSendData = [];
|
861 |
-
if ($gender_response && $age_response) {
|
862 |
-
foreach ($age_response as $type => $amount) {
|
863 |
-
$demoSendData['age'][$type] = intval($amount);
|
864 |
-
$x++;
|
865 |
-
}
|
866 |
-
foreach ($gender_response as $type => $amount) {
|
867 |
-
$demoSendData['gender'][ucfirst($type)] = intval($amount);
|
868 |
-
$x++;
|
869 |
-
}
|
870 |
-
}
|
871 |
-
|
872 |
-
// Add data for send.
|
873 |
-
update_option('googleanalytics_demo_data', wp_json_encode($demoSendData));
|
874 |
-
|
875 |
-
// Trigger send.
|
876 |
-
update_option('googleanalytics_send_data', "true");
|
877 |
-
}
|
878 |
-
|
879 |
-
/**
|
880 |
-
* Check if we should send batch of demo data.
|
881 |
-
*
|
882 |
-
* @return bool
|
883 |
-
*/
|
884 |
-
private static function checkDataDate()
|
885 |
-
{
|
886 |
-
$demo_enabled = get_option('googleanalytics_demographic');
|
887 |
-
$demo_date = get_option('googleanalytics_demo_date');
|
888 |
-
$demo_date = !empty($demo_date) ? strtotime($demo_date) : '';
|
889 |
-
$current_date = date("Y-m-d");
|
890 |
-
$thirty_date = '' !== $demo_date ? date("Y-m-d", strtotime("+1 month", $demo_date)) : '';
|
891 |
-
|
892 |
-
if (empty($demo_enabled) || !$demo_enabled) {
|
893 |
-
return false;
|
894 |
-
}
|
895 |
-
|
896 |
-
if ('' !== $demo_date && $thirty_date <= $current_date) {
|
897 |
-
return true;
|
898 |
-
} elseif ('' === $demo_date) {
|
899 |
-
return true;
|
900 |
-
}
|
901 |
-
|
902 |
-
return false;
|
903 |
-
}
|
904 |
-
|
905 |
-
/**
|
906 |
-
* Returns auth or re-auth button
|
907 |
-
*
|
908 |
-
* @return string
|
909 |
-
*/
|
910 |
-
public static function get_auth_button( $type ) {
|
911 |
-
|
912 |
-
return Ga_View_Core::load(
|
913 |
-
'ga_auth_button',
|
914 |
-
[
|
915 |
-
'label' => 'auth' === $type ? 'Authenticate with Google' : 'Re-authenticate with Google',
|
916 |
-
'type' => $type,
|
917 |
-
'url' => self::get_auth_popup_url(),
|
918 |
-
'manually_id' => get_option( self::GA_WEB_PROPERTY_ID_MANUALLY_OPTION_NAME ),
|
919 |
-
],
|
920 |
-
true
|
921 |
-
);
|
922 |
-
}
|
923 |
-
|
924 |
-
/**
|
925 |
-
* Returns debug modal
|
926 |
-
*
|
927 |
-
* @return string
|
928 |
-
*/
|
929 |
-
public static function get_debug_modal() {
|
930 |
-
|
931 |
-
return Ga_View_Core::load(
|
932 |
-
'ga_debug_modal',
|
933 |
-
[ 'debug_info' => Ga_SupportLogger::$debug_info, 'debug_help_message' => Ga_SupportLogger::$debug_help_message ],
|
934 |
-
true
|
935 |
-
);
|
936 |
-
}
|
937 |
-
|
938 |
-
public static function ga_ajax_hide_review( $post ) {
|
939 |
-
$error = 0;
|
940 |
-
|
941 |
-
if ( Ga_Controller_Core::verify_nonce( 'ga_ajax_data_change' ) ) {
|
942 |
-
update_option('googleanalytics-hide-review', true);
|
943 |
-
}
|
944 |
-
|
945 |
-
wp_send_json_success('hidden');
|
946 |
-
}
|
947 |
-
|
948 |
-
public static function gaAjaxGdprEnable( $post ) {
|
949 |
-
if (!isset($_POST['config'])) {
|
950 |
-
wp_send_json_error('No config found.');
|
951 |
-
}
|
952 |
-
|
953 |
-
update_option('googleanalytics_gdpr_config', $_POST['config']);
|
954 |
-
|
955 |
-
wp_send_json_success('gdpr_on');
|
956 |
-
}
|
957 |
-
|
958 |
-
public static function gaAjaxEnableDemo( $post ) {
|
959 |
-
check_ajax_referer( 'ga_demo_nonce', 'nonce' );
|
960 |
-
|
961 |
-
$enabled = isset($_POST['enabled']) && $_POST['enabled'] === 'true' ? true : false;
|
962 |
-
|
963 |
-
update_option('googleanalytics_demographic', $enabled);
|
964 |
-
|
965 |
-
wp_send_json_success('demo_on');
|
966 |
-
}
|
967 |
-
|
968 |
-
/**
|
969 |
-
* New property creation method.
|
970 |
-
*/
|
971 |
-
public static function createGAProperty() {
|
972 |
-
check_ajax_referer( 'googleanalyticsnonce', 'nonce' );
|
973 |
-
|
974 |
-
if (! isset($_POST['propid'], $_POST['secret'])) { // WPCS: input var ok.
|
975 |
-
wp_send_json_error( 'Set credentials failed.' );
|
976 |
-
}
|
977 |
-
|
978 |
-
$secret = sanitize_text_field( wp_unslash( $_POST['secret'] ) ); // WPCS: input var ok.
|
979 |
-
$propid = sanitize_text_field( wp_unslash( $_POST['propid'] ) ); // WPCS: input var ok.
|
980 |
-
|
981 |
-
update_option(self::GA_SHARETHIS_PROPERTY_ID, $propid);
|
982 |
-
update_option(self::GA_SHARETHIS_PROPERTY_SECRET, $secret);
|
983 |
-
}
|
984 |
-
|
985 |
-
/**
|
986 |
-
* Helper function get vendors.
|
987 |
-
*
|
988 |
-
* @param string $page
|
989 |
-
* @return array
|
990 |
-
*/
|
991 |
-
private static function getVendors()
|
992 |
-
{
|
993 |
-
$response = wp_remote_get('https://vendor-list.consensu.org/v2/vendor-list.json');
|
994 |
-
|
995 |
-
return json_decode(wp_remote_retrieve_body($response), true);
|
996 |
-
}
|
997 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class/Ga_Helper.php
DELETED
@@ -1,743 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
class Ga_Helper {
|
4 |
-
|
5 |
-
const ROLE_ID_PREFIX = 'role-id-';
|
6 |
-
const GA_DEFAULT_WEB_ID = 'UA-0000000-0';
|
7 |
-
const GA_STATISTICS_PAGE_URL = 'admin.php?page=googleanalytics';
|
8 |
-
const GA_SETTINGS_PAGE_URL = 'admin.php?page=googleanalytics/settings';
|
9 |
-
const DASHBOARD_PAGE_NAME = 'dashboard';
|
10 |
-
const PHP_VERSION_REQUIRED = '5.2.17';
|
11 |
-
const GA_WP_MODERN_VERSION = '4.1';
|
12 |
-
const GA_TOOLTIP_TERMS_NOT_ACCEPTED = 'Please accept the terms to use this feature.';
|
13 |
-
const GA_TOOLTIP_FEATURES_DISABLED = 'Click the Enable button at the top to start using this feature.';
|
14 |
-
const GA_DEBUG_MODE = false;
|
15 |
-
|
16 |
-
/**
|
17 |
-
* Init plugin actions.
|
18 |
-
*
|
19 |
-
*/
|
20 |
-
public static function init() {
|
21 |
-
|
22 |
-
// Displays errors related to required PHP version
|
23 |
-
if ( ! self::is_php_version_valid() ) {
|
24 |
-
add_action( 'admin_notices', 'Ga_Admin::admin_notice_googleanalytics_php_version' );
|
25 |
-
|
26 |
-
return false;
|
27 |
-
}
|
28 |
-
|
29 |
-
// Displays errors related to required WP version
|
30 |
-
if ( ! self::is_wp_version_valid() ) {
|
31 |
-
add_action( 'admin_notices', 'Ga_Admin::admin_notice_googleanalytics_wp_version' );
|
32 |
-
|
33 |
-
return false;
|
34 |
-
}
|
35 |
-
|
36 |
-
if ( ! is_admin() ) {
|
37 |
-
Ga_Frontend::add_actions();
|
38 |
-
}
|
39 |
-
|
40 |
-
if ( is_admin() ) {
|
41 |
-
Ga_Admin::add_filters();
|
42 |
-
Ga_Admin::add_actions();
|
43 |
-
Ga_Admin::init_oauth();
|
44 |
-
|
45 |
-
|
46 |
-
$admin_controller = new Ga_Admin_Controller();
|
47 |
-
$admin_controller->handle_actions();
|
48 |
-
}
|
49 |
-
}
|
50 |
-
|
51 |
-
/**
|
52 |
-
* Checks if current page is a WordPress dashboard.
|
53 |
-
* @return int
|
54 |
-
*/
|
55 |
-
public static function is_plugin_page() {
|
56 |
-
$site = get_current_screen();
|
57 |
-
|
58 |
-
return preg_match( '/' . GA_NAME . '/i', $site->base ) || preg_match( '/' . GA_NAME . '/i', $_SERVER['REQUEST_URI'] );
|
59 |
-
}
|
60 |
-
|
61 |
-
/**
|
62 |
-
* Checks if current page is a WordPress dashboard.
|
63 |
-
* @return number
|
64 |
-
*/
|
65 |
-
public static function is_dashboard_page() {
|
66 |
-
$site = get_current_screen();
|
67 |
-
|
68 |
-
return preg_match( '/' . self::DASHBOARD_PAGE_NAME . '/', $site->base );
|
69 |
-
}
|
70 |
-
|
71 |
-
/**
|
72 |
-
* Check whether the plugin is configured.
|
73 |
-
*
|
74 |
-
* @param String $web_id
|
75 |
-
*
|
76 |
-
* @return boolean
|
77 |
-
*/
|
78 |
-
public static function is_configured( $web_id ) {
|
79 |
-
return ( self::GA_DEFAULT_WEB_ID !== $web_id ) && ! empty( $web_id );
|
80 |
-
}
|
81 |
-
|
82 |
-
/**
|
83 |
-
* Prepare an array of current site's user roles
|
84 |
-
*
|
85 |
-
* return array
|
86 |
-
*/
|
87 |
-
public static function get_user_roles() {
|
88 |
-
global $wp_roles;
|
89 |
-
if ( ! isset( $wp_roles ) ) {
|
90 |
-
$wp_roles = new WP_Roles();
|
91 |
-
}
|
92 |
-
|
93 |
-
return $wp_roles->get_names();
|
94 |
-
}
|
95 |
-
|
96 |
-
/**
|
97 |
-
* Prepare a role ID.
|
98 |
-
*
|
99 |
-
* The role ID is derived from the role's name and will be used
|
100 |
-
* in its setting name in the additional settings.
|
101 |
-
*
|
102 |
-
* @param string $role_name Role name
|
103 |
-
*
|
104 |
-
* @return string
|
105 |
-
*/
|
106 |
-
public static function prepare_role_id( $role_name ) {
|
107 |
-
return self::ROLE_ID_PREFIX . strtolower( preg_replace( '/[\W]/', '-', before_last_bar( $role_name ) ) );
|
108 |
-
}
|
109 |
-
|
110 |
-
/**
|
111 |
-
* Prepares role id.
|
112 |
-
*
|
113 |
-
* @param $v
|
114 |
-
* @param $k
|
115 |
-
*/
|
116 |
-
public static function prepare_role( &$v, $k ) {
|
117 |
-
$v = self::prepare_role_id( $v );
|
118 |
-
}
|
119 |
-
|
120 |
-
/**
|
121 |
-
* Checks whether user role is excluded from adding UA code.
|
122 |
-
*
|
123 |
-
* @return boolean
|
124 |
-
*/
|
125 |
-
public static function can_add_ga_code() {
|
126 |
-
$current_user = wp_get_current_user();
|
127 |
-
$user_roles = !empty( $current_user->roles ) ? $current_user->roles : array();
|
128 |
-
$exclude_roles = json_decode( get_option( Ga_Admin::GA_EXCLUDE_ROLES_OPTION_NAME ), true );
|
129 |
-
|
130 |
-
array_walk( $user_roles, 'Ga_Helper::prepare_role' );
|
131 |
-
|
132 |
-
$return = true;
|
133 |
-
foreach ( $user_roles as $role ) {
|
134 |
-
if ( !empty( $exclude_roles[ $role ] ) ) {
|
135 |
-
$return = false;
|
136 |
-
break;
|
137 |
-
}
|
138 |
-
}
|
139 |
-
|
140 |
-
return $return;
|
141 |
-
}
|
142 |
-
|
143 |
-
/**
|
144 |
-
* Adds ga dashboard widget HTML code for a WordPress
|
145 |
-
* Dashboard widget hook.
|
146 |
-
*/
|
147 |
-
public static function add_ga_dashboard_widget() {
|
148 |
-
echo self::get_ga_dashboard_widget( null, false, false, true );
|
149 |
-
}
|
150 |
-
|
151 |
-
/**
|
152 |
-
* Generates dashboard widget HTML code.
|
153 |
-
*
|
154 |
-
* @param string $date_range Google Analytics specific date range string.
|
155 |
-
* @param boolean $text_mode
|
156 |
-
* @param boolean $ajax
|
157 |
-
*
|
158 |
-
* @return null | string HTML dashboard widget code.
|
159 |
-
*/
|
160 |
-
public static function get_ga_dashboard_widget( $date_range = null, $text_mode = false, $ajax = false, $trigger_request = false ) {
|
161 |
-
if ( empty( $date_range ) ) {
|
162 |
-
$date_range = '30daysAgo';
|
163 |
-
}
|
164 |
-
|
165 |
-
if ( !$trigger_request ) {
|
166 |
-
// Get chart and boxes data
|
167 |
-
$data = self::get_dashboard_widget_data( $date_range );
|
168 |
-
|
169 |
-
if ( $text_mode ) {
|
170 |
-
return self::get_chart_page( 'ga_dashboard_widget' . ( $ajax ? "_ajax" : "" ), array(
|
171 |
-
'chart' => $data[ 'chart' ],
|
172 |
-
'boxes' => $data[ 'boxes' ]
|
173 |
-
) );
|
174 |
-
} else {
|
175 |
-
echo self::get_chart_page( 'ga_dashboard_widget' . ( $ajax ? "_ajax" : "" ), array(
|
176 |
-
'chart' => $data[ 'chart' ],
|
177 |
-
'boxes' => $data[ 'boxes' ],
|
178 |
-
'more_details_url' => admin_url( self::GA_STATISTICS_PAGE_URL ),
|
179 |
-
'ga_nonce' => wp_create_nonce( 'ga_ajax_data_change' ),
|
180 |
-
'ga_nonce_name' => Ga_Admin_Controller::GA_NONCE_FIELD_NAME
|
181 |
-
) );
|
182 |
-
}
|
183 |
-
} else {
|
184 |
-
echo self::get_chart_page( 'ga_dashboard_widget' . ( $ajax ? "_ajax" : "" ), array(
|
185 |
-
'chart' => array(),
|
186 |
-
'boxes' => Ga_Stats::get_empty_boxes_structure(),
|
187 |
-
'more_details_url' => admin_url( self::GA_STATISTICS_PAGE_URL ),
|
188 |
-
'show_trigger_button' => true,
|
189 |
-
'ga_nonce' => wp_create_nonce( 'ga_ajax_data_change' ),
|
190 |
-
'ga_nonce_name' => Ga_Admin_Controller::GA_NONCE_FIELD_NAME
|
191 |
-
) );
|
192 |
-
}
|
193 |
-
|
194 |
-
return null;
|
195 |
-
}
|
196 |
-
|
197 |
-
/**
|
198 |
-
* Generates JSON data string for AJAX calls.
|
199 |
-
*
|
200 |
-
* @param string $date_range
|
201 |
-
* @param string $metric
|
202 |
-
* @param boolean $text_mode
|
203 |
-
* @param boolean $ajax
|
204 |
-
*
|
205 |
-
* @return string|false Returns JSON data string
|
206 |
-
*/
|
207 |
-
public static function get_ga_dashboard_widget_data_json(
|
208 |
-
$date_range = null, $metric = null, $text_mode = false, $ajax = false
|
209 |
-
) {
|
210 |
-
if ( empty( $date_range ) ) {
|
211 |
-
$date_range = '30daysAgo';
|
212 |
-
}
|
213 |
-
|
214 |
-
if ( empty( $metric ) ) {
|
215 |
-
$metric = 'pageviews';
|
216 |
-
}
|
217 |
-
|
218 |
-
$data = self::get_dashboard_widget_data( $date_range, $metric );
|
219 |
-
|
220 |
-
return wp_json_encode( $data );
|
221 |
-
}
|
222 |
-
|
223 |
-
/**
|
224 |
-
* Gets dashboard widget data.
|
225 |
-
*
|
226 |
-
* @param date_range
|
227 |
-
* @param metric
|
228 |
-
*
|
229 |
-
* @return array Return chart and boxes data
|
230 |
-
*/
|
231 |
-
private static function get_dashboard_widget_data( $date_range, $metric = null ) {
|
232 |
-
$selected = self::get_selected_account_data( true );
|
233 |
-
if ( self::is_authorized() && self::is_account_selected() ) {
|
234 |
-
$query_params = Ga_Stats::get_query( 'main_chart', $selected[ 'view_id' ], $date_range, $metric, true );
|
235 |
-
$stats_data = Ga_Admin::api_client()->call( 'ga_api_data', array(
|
236 |
-
$query_params
|
237 |
-
) );
|
238 |
-
|
239 |
-
$boxes_query = Ga_Stats::get_query( 'dashboard_boxes', $selected[ 'view_id' ], $date_range, null, true );
|
240 |
-
$boxes_data = Ga_Admin::api_client()->call( 'ga_api_data', array(
|
241 |
-
$boxes_query
|
242 |
-
) );
|
243 |
-
}
|
244 |
-
$chart = !empty( $stats_data ) ? Ga_Stats::get_dashboard_chart( $stats_data->getData() ) : array();
|
245 |
-
$boxes = !empty( $boxes_data ) ? Ga_Stats::get_dashboard_boxes_data( $boxes_data->getData() ) : array();
|
246 |
-
|
247 |
-
return array(
|
248 |
-
'chart' => $chart,
|
249 |
-
'boxes' => $boxes
|
250 |
-
);
|
251 |
-
}
|
252 |
-
|
253 |
-
public static function is_account_selected() {
|
254 |
-
return self::get_selected_account_data();
|
255 |
-
}
|
256 |
-
|
257 |
-
/**
|
258 |
-
* Returns HTML code of the chart page or a notice.
|
259 |
-
*
|
260 |
-
* @param chart
|
261 |
-
*
|
262 |
-
* @return string Returns HTML code
|
263 |
-
*/
|
264 |
-
public static function get_chart_page( $view, $params ) {
|
265 |
-
|
266 |
-
$message = sprintf( __( 'Statistics can only be seen after you authenticate with your Google account on the <a href="%s">Settings page</a>.' ), admin_url( self::GA_SETTINGS_PAGE_URL ) );
|
267 |
-
|
268 |
-
if ( self::is_authorized() && !self::is_code_manually_enabled() && !self::is_all_feature_disabled() ) {
|
269 |
-
if ( self::is_account_selected() ) {
|
270 |
-
if ( $params ) {
|
271 |
-
return Ga_View_Core::load( $view, $params, true );
|
272 |
-
} else {
|
273 |
-
return self::ga_oauth_notice( sprintf( 'Please configure your <a href="%s">Google Analytics settings</a>.', admin_url( self::GA_SETTINGS_PAGE_URL ) ) );
|
274 |
-
}
|
275 |
-
} else {
|
276 |
-
return self::ga_oauth_notice( $message );
|
277 |
-
}
|
278 |
-
} else {
|
279 |
-
return self::ga_oauth_notice( $message );
|
280 |
-
}
|
281 |
-
}
|
282 |
-
|
283 |
-
/**
|
284 |
-
* Checks whether users is authorized with Google.
|
285 |
-
*
|
286 |
-
* @return boolean
|
287 |
-
*/
|
288 |
-
public static function is_authorized() {
|
289 |
-
return Ga_Admin::api_client()->get_instance()->is_authorized();
|
290 |
-
}
|
291 |
-
|
292 |
-
/**
|
293 |
-
* Wrapper for WordPress method get_option
|
294 |
-
*
|
295 |
-
* @param string $name Option name
|
296 |
-
*
|
297 |
-
* @return NULL|mixed|boolean
|
298 |
-
*/
|
299 |
-
public static function get_option( $name ) {
|
300 |
-
$opt = get_option( $name );
|
301 |
-
|
302 |
-
return !empty( $opt ) ? $opt : null;
|
303 |
-
}
|
304 |
-
|
305 |
-
/**
|
306 |
-
* Wrapper for WordPress method update_option
|
307 |
-
*
|
308 |
-
* @param string $name
|
309 |
-
* @param mixed $value
|
310 |
-
*
|
311 |
-
* @return NULL|boolean
|
312 |
-
*/
|
313 |
-
public static function update_option( $name, $value ) {
|
314 |
-
$opt = update_option( $name, $value );
|
315 |
-
|
316 |
-
return !empty( $opt ) ? $opt : null;
|
317 |
-
}
|
318 |
-
|
319 |
-
/**
|
320 |
-
* Loads ga notice HTML code with given message included.
|
321 |
-
*
|
322 |
-
* @param string $message
|
323 |
-
* $param bool $cannot_activate Whether the plugin cannot be activated
|
324 |
-
*
|
325 |
-
* @return string
|
326 |
-
*/
|
327 |
-
public static function ga_oauth_notice( $message ) {
|
328 |
-
return Ga_View_Core::load( 'ga_oauth_notice', array(
|
329 |
-
'msg' => $message
|
330 |
-
), true );
|
331 |
-
}
|
332 |
-
|
333 |
-
/**
|
334 |
-
* Displays notice following the WP style.
|
335 |
-
*
|
336 |
-
* @param $message
|
337 |
-
* @param string $type
|
338 |
-
* @param $is_dismissable
|
339 |
-
* @param $action
|
340 |
-
*
|
341 |
-
* @return string
|
342 |
-
*/
|
343 |
-
public static function ga_wp_notice( $message, $type = '', $is_dismissable = false, $action = array() ) {
|
344 |
-
return Ga_View_Core::load( 'ga_wp_notice', array(
|
345 |
-
'type' => empty( $type ) ? Ga_Admin::NOTICE_WARNING : $type,
|
346 |
-
'msg' => $message,
|
347 |
-
'is_dismissable' => $is_dismissable,
|
348 |
-
'action' => $action
|
349 |
-
), true );
|
350 |
-
}
|
351 |
-
|
352 |
-
/**
|
353 |
-
* Gets data according to selected GA account.
|
354 |
-
*
|
355 |
-
* @param boolean $assoc
|
356 |
-
*
|
357 |
-
* @return mixed
|
358 |
-
*/
|
359 |
-
public static function get_selected_account_data( $assoc = false ) {
|
360 |
-
$data = json_decode( self::get_option( Ga_Admin::GA_SELECTED_ACCOUNT ) );
|
361 |
-
$data = (!empty( $data ) && count( $data ) == 3 ) ? $data : false;
|
362 |
-
|
363 |
-
if ( $data ) {
|
364 |
-
if ( $assoc ) {
|
365 |
-
return array(
|
366 |
-
'account_id' => $data[ 0 ],
|
367 |
-
'web_property_id' => $data[ 1 ],
|
368 |
-
'view_id' => $data[ 2 ]
|
369 |
-
);
|
370 |
-
} else {
|
371 |
-
return $data;
|
372 |
-
}
|
373 |
-
}
|
374 |
-
|
375 |
-
return false;
|
376 |
-
}
|
377 |
-
|
378 |
-
/**
|
379 |
-
* Chekcs whether option for manually UA-code
|
380 |
-
* @return NULL|mixed|boolean
|
381 |
-
*/
|
382 |
-
public static function is_code_manually_enabled() {
|
383 |
-
return Ga_Helper::get_option( Ga_Admin::GA_WEB_PROPERTY_ID_MANUALLY_OPTION_NAME );
|
384 |
-
}
|
385 |
-
|
386 |
-
/**
|
387 |
-
* Adds percent sign to the given text.
|
388 |
-
*
|
389 |
-
* @param $text
|
390 |
-
*
|
391 |
-
* @return string
|
392 |
-
*/
|
393 |
-
public static function format_percent( $text ) {
|
394 |
-
$text = self::add_plus( $text );
|
395 |
-
|
396 |
-
return $text . '%';
|
397 |
-
}
|
398 |
-
|
399 |
-
/**
|
400 |
-
* Adds plus sign before number.
|
401 |
-
*
|
402 |
-
* @param $number
|
403 |
-
*
|
404 |
-
* @return string
|
405 |
-
*/
|
406 |
-
public static function add_plus( $number ) {
|
407 |
-
if ( $number > 0 ) {
|
408 |
-
return '+' . $number;
|
409 |
-
}
|
410 |
-
|
411 |
-
return $number;
|
412 |
-
}
|
413 |
-
|
414 |
-
/**
|
415 |
-
* Check whether current user has administrator privileges.
|
416 |
-
*
|
417 |
-
* @return bool
|
418 |
-
*/
|
419 |
-
public static function is_administrator() {
|
420 |
-
if ( current_user_can( 'administrator' ) ) {
|
421 |
-
return true;
|
422 |
-
}
|
423 |
-
|
424 |
-
return false;
|
425 |
-
}
|
426 |
-
|
427 |
-
public static function is_wp_version_valid() {
|
428 |
-
$wp_version = get_bloginfo( 'version' );
|
429 |
-
|
430 |
-
return version_compare( $wp_version, Ga_Admin::MIN_WP_VERSION, 'ge' );
|
431 |
-
}
|
432 |
-
|
433 |
-
/**
|
434 |
-
* Check if terms are accepted
|
435 |
-
*
|
436 |
-
* @return bool
|
437 |
-
*/
|
438 |
-
public static function are_terms_accepted() {
|
439 |
-
return self::get_option( Ga_Admin::GA_SHARETHIS_TERMS_OPTION_NAME );
|
440 |
-
}
|
441 |
-
|
442 |
-
/**
|
443 |
-
* Check if sharethis scripts enabled
|
444 |
-
*
|
445 |
-
* @return bool
|
446 |
-
*/
|
447 |
-
public static function is_sharethis_included() {
|
448 |
-
return GA_SHARETHIS_SCRIPTS_INCLUDED;
|
449 |
-
}
|
450 |
-
|
451 |
-
/**
|
452 |
-
* @return mixed
|
453 |
-
*/
|
454 |
-
public static function is_php_version_valid() {
|
455 |
-
$p = '#(\.0+)+($|-)#';
|
456 |
-
$ver1 = preg_replace( $p, '', phpversion() );
|
457 |
-
$ver2 = preg_replace( $p, '', self::PHP_VERSION_REQUIRED );
|
458 |
-
$operator = 'ge';
|
459 |
-
$compare = isset( $operator ) ?
|
460 |
-
version_compare( $ver1, $ver2, $operator ) :
|
461 |
-
version_compare( $ver1, $ver2 );
|
462 |
-
|
463 |
-
return $compare;
|
464 |
-
}
|
465 |
-
|
466 |
-
public static function get_current_url() {
|
467 |
-
return $_SERVER[ 'REQUEST_URI' ];
|
468 |
-
}
|
469 |
-
|
470 |
-
public static function create_url( $url, $data = array() ) {
|
471 |
-
return !empty( $data ) ? ( strstr( $url, '?' ) ? ( $url . '&' ) : ( $url . '?' ) ) . http_build_query( $data ) : $url;
|
472 |
-
}
|
473 |
-
|
474 |
-
public static function handle_url_message( $data ) {
|
475 |
-
if ( !empty( $_GET[ 'ga_msg' ] ) ) {
|
476 |
-
$invite_result = json_decode( base64_decode( $_GET[ 'ga_msg' ] ), true );
|
477 |
-
if ( !empty( $invite_result[ 'status' ] ) && !empty( $invite_result[ 'message' ] ) ) {
|
478 |
-
$data[ 'ga_msg' ] = Ga_Helper::ga_wp_notice( $invite_result[ 'message' ], $invite_result[ 'status' ], true );
|
479 |
-
}
|
480 |
-
}
|
481 |
-
|
482 |
-
return $data;
|
483 |
-
}
|
484 |
-
|
485 |
-
public static function get_url_message_text() {
|
486 |
-
$ga_msg = '';
|
487 |
-
$invite_result = json_decode( base64_decode( $_GET[ 'ga_msg' ] ), true );
|
488 |
-
if ( !empty( $invite_result[ 'status' ] ) && !empty( $invite_result[ 'message' ] ) ) {
|
489 |
-
$ga_msg = $invite_result[ 'message' ];
|
490 |
-
}
|
491 |
-
|
492 |
-
return $ga_msg;
|
493 |
-
}
|
494 |
-
|
495 |
-
/**
|
496 |
-
* Create base64 url message
|
497 |
-
*
|
498 |
-
* @param $msg
|
499 |
-
* @param $status
|
500 |
-
*
|
501 |
-
* @return string
|
502 |
-
*/
|
503 |
-
public static function create_url_msg( $msg, $status ) {
|
504 |
-
$msg = array( 'status' => $status, 'message' => $msg );
|
505 |
-
|
506 |
-
return base64_encode( json_encode( $msg ) );
|
507 |
-
}
|
508 |
-
|
509 |
-
public static function is_all_feature_disabled() {
|
510 |
-
return self::get_option( Ga_Admin::GA_DISABLE_ALL_FEATURES );
|
511 |
-
}
|
512 |
-
|
513 |
-
public static function are_features_enabled() {
|
514 |
-
return self::are_terms_accepted() && !self::is_all_feature_disabled();
|
515 |
-
}
|
516 |
-
|
517 |
-
public static function are_sharethis_properties_verified() {
|
518 |
-
return ( get_option( Ga_Admin::GA_SHARETHIS_VERIFICATION_RESULT ) && self::are_sharethis_properties_set() );
|
519 |
-
}
|
520 |
-
|
521 |
-
public static function are_sharethis_properties_ready_to_verify() {
|
522 |
-
return ( self::are_sharethis_properties_set() && !get_option( Ga_Admin::GA_SHARETHIS_VERIFICATION_RESULT ) );
|
523 |
-
}
|
524 |
-
|
525 |
-
public static function are_sharethis_properties_set() {
|
526 |
-
return ( get_option( Ga_Admin::GA_SHARETHIS_PROPERTY_ID ) && get_option( Ga_Admin::GA_SHARETHIS_PROPERTY_SECRET ) );
|
527 |
-
}
|
528 |
-
|
529 |
-
public static function should_create_sharethis_property() {
|
530 |
-
return ( self::are_features_enabled() && !self::are_sharethis_properties_set() );
|
531 |
-
}
|
532 |
-
|
533 |
-
public static function should_verify_sharethis_installation() {
|
534 |
-
return ( self::are_features_enabled() && self::are_sharethis_properties_ready_to_verify() );
|
535 |
-
}
|
536 |
-
|
537 |
-
public static function get_tooltip() {
|
538 |
-
if ( !self::are_terms_accepted() ) {
|
539 |
-
return self::GA_TOOLTIP_TERMS_NOT_ACCEPTED;
|
540 |
-
} else if ( !self::are_features_enabled() ) {
|
541 |
-
return self::GA_TOOLTIP_FEATURES_DISABLED;
|
542 |
-
} else {
|
543 |
-
return '';
|
544 |
-
}
|
545 |
-
}
|
546 |
-
|
547 |
-
/**
|
548 |
-
* Is this version of WordPress considered old (< 4.1)?
|
549 |
-
*
|
550 |
-
* @return bool True if old, False if not.
|
551 |
-
*/
|
552 |
-
public static function is_wp_old() {
|
553 |
-
return version_compare( get_bloginfo( 'version' ), self::GA_WP_MODERN_VERSION, 'lt' );
|
554 |
-
}
|
555 |
-
|
556 |
-
/**
|
557 |
-
* Should we load GA JavaScript on this property?
|
558 |
-
*
|
559 |
-
* @param string $web_property_id
|
560 |
-
*
|
561 |
-
* @return bool
|
562 |
-
*/
|
563 |
-
public static function should_load_ga_javascript( $web_property_id ) {
|
564 |
-
return ( self::is_configured( $web_property_id ) && ( self::can_add_ga_code() || self::is_all_feature_disabled() ) );
|
565 |
-
}
|
566 |
-
|
567 |
-
/**
|
568 |
-
* Get account ID.
|
569 |
-
*
|
570 |
-
* @return string
|
571 |
-
*/
|
572 |
-
public static function get_account_id() {
|
573 |
-
$account_id = json_decode( Ga_Helper::get_option( Ga_Admin::GA_SELECTED_ACCOUNT ) );
|
574 |
-
|
575 |
-
return ! empty( $account_id[0] ) ? $account_id[0] : '';
|
576 |
-
}
|
577 |
-
|
578 |
-
/**
|
579 |
-
* Is curl disabled?
|
580 |
-
*
|
581 |
-
* @return bool True if disabled, false if enabled.
|
582 |
-
*/
|
583 |
-
public static function is_curl_disabled() {
|
584 |
-
return ! function_exists( 'curl_version' );
|
585 |
-
}
|
586 |
-
|
587 |
-
/**
|
588 |
-
* Get URL with correct protocol.
|
589 |
-
*
|
590 |
-
* @return string URL with correct protocol.
|
591 |
-
*/
|
592 |
-
public static function get_plugin_url_with_correct_protocol() {
|
593 |
-
$url = parse_url( GA_PLUGIN_URL );
|
594 |
-
return ( ( is_ssl() ) ? 'https://' : 'http://' ) . $url['host'] . $url['path'];
|
595 |
-
}
|
596 |
-
|
597 |
-
/**
|
598 |
-
* Get code to manually label classes.
|
599 |
-
*
|
600 |
-
* @return string
|
601 |
-
*/
|
602 |
-
public static function get_code_manually_label_classes() {
|
603 |
-
$classes = '';
|
604 |
-
if ( ! self::are_features_enabled() ){
|
605 |
-
$classes = 'label-grey ga-tooltip';
|
606 |
-
}
|
607 |
-
else if( self::is_account_selected() ) {
|
608 |
-
$classes = 'label-grey';
|
609 |
-
}
|
610 |
-
return $classes;
|
611 |
-
}
|
612 |
-
|
613 |
-
/**
|
614 |
-
* Get Previous Period for Dates (date start and date end).
|
615 |
-
*
|
616 |
-
* @param string $date_start Date string.
|
617 |
-
* @param string $date_end Date string.
|
618 |
-
*
|
619 |
-
* @return array Array of start and end dates in Y-m-d format.
|
620 |
-
* @since 2.5.2
|
621 |
-
*/
|
622 |
-
public static function getPreviousPeriodForDates($date_start = '', $date_end = '')
|
623 |
-
{
|
624 |
-
try {
|
625 |
-
// Get distance between dates in days.
|
626 |
-
$start = new DateTime($date_start);
|
627 |
-
$end = new DateTime($date_end);
|
628 |
-
} catch (\Exception $e) {
|
629 |
-
return [
|
630 |
-
'start' => date('Y-m-d', strtotime('-1 week')),
|
631 |
-
'end' => date('Y-m-d'),
|
632 |
-
];
|
633 |
-
}
|
634 |
-
|
635 |
-
// Clone $start date into end_previous so we don't modify $start.
|
636 |
-
$end_previous = clone $start;
|
637 |
-
|
638 |
-
// Set the period to the difference between the start/end dates in days.
|
639 |
-
$period = $end->diff($start)->days;
|
640 |
-
|
641 |
-
// Subtract 1 day from $end_previous so it's one day before $start.
|
642 |
-
$end_previous->modify('-1 day');
|
643 |
-
|
644 |
-
// Clone $end_previous so we can subtract $period from it in days.
|
645 |
-
$start_previous = clone $end_previous;
|
646 |
-
$start_previous->modify(sprintf('-%d day', $period));
|
647 |
-
|
648 |
-
return [
|
649 |
-
'start' => $start_previous->format('Y-m-d'),
|
650 |
-
'end' => $end_previous->format('Y-m-d'),
|
651 |
-
];
|
652 |
-
}
|
653 |
-
|
654 |
-
/**
|
655 |
-
* Get period between dates in days.
|
656 |
-
*
|
657 |
-
* @param string $date_start Start date string.
|
658 |
-
* @param string $date_end End date string.
|
659 |
-
*
|
660 |
-
* @return int
|
661 |
-
* @since 2.5.2
|
662 |
-
*/
|
663 |
-
public static function getPeriodInDays($date_start = '', $date_end = '')
|
664 |
-
{
|
665 |
-
$date_start = empty($date_start) ? date('Y-m-d', strtotime('-1 week')) : $date_start;
|
666 |
-
$date_end = empty($date_end) ? date('Y-m-d') : $date_end;
|
667 |
-
|
668 |
-
try {
|
669 |
-
// Get distance between dates in days.
|
670 |
-
$start = new DateTime($date_start);
|
671 |
-
$end = new DateTime($date_end);
|
672 |
-
} catch (\Exception $e) {
|
673 |
-
return 0;
|
674 |
-
}
|
675 |
-
|
676 |
-
// Set the period to the difference between the start/end dates in days.
|
677 |
-
return intval($start->diff($end)->format('%r%a'));
|
678 |
-
}
|
679 |
-
|
680 |
-
/**
|
681 |
-
* Get period in Days as words.
|
682 |
-
*
|
683 |
-
* @param string $date_start Start date string.
|
684 |
-
* @param string $date_end End date string.
|
685 |
-
*
|
686 |
-
* @return string Words to indicate days.
|
687 |
-
* @since 2.5.2
|
688 |
-
*/
|
689 |
-
public static function getPeriodInDaysWords($date_start = '', $date_end = '')
|
690 |
-
{
|
691 |
-
$days = self::getPeriodInDays($date_start, $date_end);
|
692 |
-
|
693 |
-
$date_end = empty($date_end) ? strtotime('now') : strtotime($date_end);
|
694 |
-
|
695 |
-
// If today is the same as the end date.
|
696 |
-
if (date('Y-m-d', $date_end) === date('Y-m-d')) {
|
697 |
-
if (0 === $days) {
|
698 |
-
return __('Today', 'googleanalytics');
|
699 |
-
}
|
700 |
-
|
701 |
-
if (7 === $days) {
|
702 |
-
return __('This Week', 'googleanalytics');
|
703 |
-
}
|
704 |
-
|
705 |
-
return sprintf(_n('Last %d Day', 'Last %d Days', $days, 'googleanalytics'), $days);
|
706 |
-
}
|
707 |
-
|
708 |
-
return sprintf(_n('%d Day', '%d Days', $days, 'googleanalytics'), $days);
|
709 |
-
}
|
710 |
-
|
711 |
-
/**
|
712 |
-
* Get date range from GET request.
|
713 |
-
*
|
714 |
-
* @return array
|
715 |
-
* @since 2.5.2
|
716 |
-
*/
|
717 |
-
public static function getDateRangeFromRequest()
|
718 |
-
{
|
719 |
-
$date_range = filter_input_array(INPUT_GET, [
|
720 |
-
'date_from' => FILTER_SANITIZE_STRING,
|
721 |
-
'date_to' => FILTER_SANITIZE_STRING,
|
722 |
-
]);
|
723 |
-
|
724 |
-
// If date_from is after date_to, let's reset 'from' to a week before 'to.'
|
725 |
-
if (0 > Ga_Helper::getPeriodInDays($date_range['date_from'], $date_range['date_to'])) {
|
726 |
-
try {
|
727 |
-
$date = new DateTime($date_range['date_to']);
|
728 |
-
$date->modify('-1 week');
|
729 |
-
|
730 |
-
$date_from = $date->format('Y-m-d');
|
731 |
-
} catch (\Exception $e) {
|
732 |
-
$date_from = date('Y-m-d', strtotime('-1 week'));
|
733 |
-
}
|
734 |
-
|
735 |
-
$date_range['date_from'] = $date_from;
|
736 |
-
}
|
737 |
-
|
738 |
-
return [
|
739 |
-
'from' => $date_range['date_from'],
|
740 |
-
'to' => $date_range['date_to'],
|
741 |
-
];
|
742 |
-
}
|
743 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class/Ga_Notice.php
DELETED
@@ -1,35 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
/**
|
4 |
-
* Handles exception translations.
|
5 |
-
*
|
6 |
-
* Created by PhpStorm.
|
7 |
-
* User: mdn
|
8 |
-
* Date: 2017-01-25
|
9 |
-
* Time: 14:37
|
10 |
-
*/
|
11 |
-
class Ga_Notice {
|
12 |
-
|
13 |
-
public static function get_message( $error ) {
|
14 |
-
$message = '';
|
15 |
-
|
16 |
-
if ( Ga_Helper::GA_DEBUG_MODE ) {
|
17 |
-
$message = Ga_Helper::ga_wp_notice( (!empty( $error[ 'class' ] ) ? _( '[' . $error[ 'class' ] . ']' ) : '' ) . ' ' . $error[ 'message' ], 'error' );
|
18 |
-
} elseif ( $error[ 'class' ] == 'Ga_Lib_Google_Api_Client_AuthCode_Exception' ) {
|
19 |
-
$message = Ga_Helper::ga_wp_notice( $error[ 'message' ], 'error' );
|
20 |
-
} elseif ( $error[ 'class' ] == 'Ga_Lib_Sharethis_Api_Client_InvalidDomain_Exception' ) {
|
21 |
-
$message = Ga_Helper::ga_wp_notice( $error[ 'message' ], 'error' );
|
22 |
-
} elseif ( $error[ 'class' ] == 'Ga_Lib_Sharethis_Api_Client_Invite_Exception' ) {
|
23 |
-
$message = Ga_Helper::ga_wp_notice( $error[ 'message' ], 'error' );
|
24 |
-
} elseif ( in_array( $error[ 'class' ], array( 'Ga_Lib_Sharethis_Api_Client_Verify_Exception', 'Ga_Lib_Sharethis_Api_Client_Alerts_Exception' ) ) ) {
|
25 |
-
$message = Ga_Helper::ga_wp_notice( Ga_Sharethis::GA_SHARETHIS_ALERTS_ERROR, 'error' );
|
26 |
-
} elseif ( $error[ 'class' ] == 'Ga_Data_Outdated_Exception' ) {
|
27 |
-
$message = Ga_Helper::ga_wp_notice( $error[ 'message' ], 'warning' );
|
28 |
-
} else {
|
29 |
-
$message = Ga_Helper::ga_wp_notice( _( 'There are temporary connection issues, please try again later or go to Google Analytics website to see the dashboards' ), 'error' );
|
30 |
-
}
|
31 |
-
|
32 |
-
return $message;
|
33 |
-
}
|
34 |
-
|
35 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class/Ga_Sharethis.php
DELETED
@@ -1,101 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
/**
|
4 |
-
* Ga_Sharethis class
|
5 |
-
*
|
6 |
-
* Preparing request and parsing response from Sharethis Platform Api
|
7 |
-
*
|
8 |
-
* @author wle@adips.com
|
9 |
-
* @version 1.0
|
10 |
-
*/
|
11 |
-
|
12 |
-
class Ga_Sharethis {
|
13 |
-
|
14 |
-
public static function get_body( $data ) {
|
15 |
-
$body = $data->getBody();
|
16 |
-
return json_decode( $body );
|
17 |
-
}
|
18 |
-
|
19 |
-
/**
|
20 |
-
* Create sharethis options
|
21 |
-
*/
|
22 |
-
public static function create_sharethis_options( $api_client ) {
|
23 |
-
$data = array();
|
24 |
-
$parsed_url = parse_url( get_option( 'siteurl' ) );
|
25 |
-
$domain = $parsed_url['host'] . ( !empty( $parsed_url['path'] ) ? $parsed_url['path'] : '' );
|
26 |
-
$query_params = array(
|
27 |
-
'domain' => $domain,
|
28 |
-
'is_wordpress' => true,
|
29 |
-
'onboarding_product' => 'ga',
|
30 |
-
);
|
31 |
-
$response = $api_client->call( 'ga_api_create_sharethis_property', array(
|
32 |
-
$query_params
|
33 |
-
) );
|
34 |
-
$sharethis_options = self::get_sharethis_options( $response );
|
35 |
-
if ( !empty( $sharethis_options[ 'id' ] ) ) {
|
36 |
-
add_option( Ga_Admin::GA_SHARETHIS_PROPERTY_ID, $sharethis_options[ 'id' ] );
|
37 |
-
}
|
38 |
-
if ( !empty( $sharethis_options[ 'secret' ] ) ) {
|
39 |
-
add_option( Ga_Admin::GA_SHARETHIS_PROPERTY_SECRET, $sharethis_options[ 'secret' ] );
|
40 |
-
}
|
41 |
-
|
42 |
-
return $data;
|
43 |
-
}
|
44 |
-
|
45 |
-
public static function get_sharethis_options( $response ) {
|
46 |
-
$body = self::get_body( $response );
|
47 |
-
$options = array();
|
48 |
-
if ( !empty( $body ) ) {
|
49 |
-
foreach ( $body as $key => $value ) {
|
50 |
-
if ( $key == '_id' ) {
|
51 |
-
$options[ 'id' ] = $value;
|
52 |
-
} else if ( $key == 'secret' ) {
|
53 |
-
$options[ 'secret' ] = $value;
|
54 |
-
} else if ( $key == 'error' ) {
|
55 |
-
$options[ 'error' ] = $value;
|
56 |
-
}
|
57 |
-
}
|
58 |
-
} else {
|
59 |
-
$options[ 'error' ] = 'error';
|
60 |
-
}
|
61 |
-
return $options;
|
62 |
-
}
|
63 |
-
|
64 |
-
public static function sharethis_installation_verification( $api_client ) {
|
65 |
-
if ( Ga_Helper::should_verify_sharethis_installation() ) {
|
66 |
-
$query_params = array(
|
67 |
-
'id' => get_option( Ga_Admin::GA_SHARETHIS_PROPERTY_ID ),
|
68 |
-
'secret' => get_option( Ga_Admin::GA_SHARETHIS_PROPERTY_SECRET )
|
69 |
-
);
|
70 |
-
$response = $api_client->call( 'ga_api_sharethis_installation_verification', array(
|
71 |
-
$query_params
|
72 |
-
) );
|
73 |
-
$result = self::get_verification_result( $response );
|
74 |
-
if ( !empty( $result ) ) {
|
75 |
-
add_option( Ga_Admin::GA_SHARETHIS_VERIFICATION_RESULT, true );
|
76 |
-
}
|
77 |
-
}
|
78 |
-
}
|
79 |
-
|
80 |
-
public static function get_verification_result( $response ) {
|
81 |
-
$body = self::get_body( $response );
|
82 |
-
if ( !empty( $body->{"status"} ) ) {
|
83 |
-
return true;
|
84 |
-
}
|
85 |
-
return false;
|
86 |
-
}
|
87 |
-
|
88 |
-
public static function get_alerts( $response ) {
|
89 |
-
$body = self::get_body( $response );
|
90 |
-
if ( !empty( $body ) ) {
|
91 |
-
if ( !empty( $body[ 'error' ] ) ) {
|
92 |
-
return (object) array( 'error' => self::GA_SHARETHIS_ALERTS_ERROR );
|
93 |
-
}
|
94 |
-
|
95 |
-
return $body;
|
96 |
-
} else {
|
97 |
-
return array();
|
98 |
-
}
|
99 |
-
}
|
100 |
-
|
101 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class/Ga_Stats.php
DELETED
@@ -1,1047 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
/**
|
4 |
-
* Ga_Stats class
|
5 |
-
*
|
6 |
-
* Preparing request and parsing response from Google Analytics Reporting Api
|
7 |
-
*
|
8 |
-
* @author wle@adips.com
|
9 |
-
* @version 1.0
|
10 |
-
*/
|
11 |
-
class Ga_Stats {
|
12 |
-
|
13 |
-
private $profile = array();
|
14 |
-
|
15 |
-
/**
|
16 |
-
* Primary class constructor.
|
17 |
-
*
|
18 |
-
* @access public
|
19 |
-
* @since 7.0.0
|
20 |
-
*/
|
21 |
-
public function __construct() {
|
22 |
-
}
|
23 |
-
|
24 |
-
/**
|
25 |
-
* Preparing query to get Analytics data
|
26 |
-
*
|
27 |
-
* @param string $query query type
|
28 |
-
* @param int $id_view The Analytics view ID from which to retrieve data.
|
29 |
-
* @param string $date_range The start date for the query in the format YYYY-MM-DD or '7daysAgo'
|
30 |
-
* @param string $metric A metric expression
|
31 |
-
* @param bool $old Use old query style.
|
32 |
-
*
|
33 |
-
* @return array Request query
|
34 |
-
*/
|
35 |
-
public static function get_query( $query, $id_view, $date_range = null, $metric = null, $old = false ) {
|
36 |
-
if ( $query == 'main_chart' ) {
|
37 |
-
return $old ? self::main_chart_query_old($id_view, $date_range, $metric) : self::main_chart_query($id_view,
|
38 |
-
$date_range, $metric);
|
39 |
-
} elseif ( $query == 'gender' ) {
|
40 |
-
return self::gender_chart_query($id_view, $date_range, $metric);
|
41 |
-
} elseif ( $query == 'device' ) {
|
42 |
-
return self::device_chart_query($id_view, $date_range, $metric);
|
43 |
-
} elseif ( $query == 'age' ) {
|
44 |
-
return self::age_chart_query($id_view, $date_range, $metric);
|
45 |
-
} elseif ( $query == 'boxes' ) {
|
46 |
-
return self::boxes_query( $id_view );
|
47 |
-
} elseif ( $query == 'dashboard_boxes' ) {
|
48 |
-
return $old ? self::dashboard_boxes_query_old( $id_view, $date_range ) :
|
49 |
-
self::dashboard_boxes_query( $id_view, $date_range );
|
50 |
-
} elseif ( $query == 'sources' ) {
|
51 |
-
return self::sources_query( $id_view, $date_range );
|
52 |
-
} else {
|
53 |
-
return array();
|
54 |
-
}
|
55 |
-
}
|
56 |
-
|
57 |
-
/**
|
58 |
-
* Preparing query for top traffic sources table
|
59 |
-
*
|
60 |
-
* @param int $id_view The Analytics view ID from which to retrieve data.
|
61 |
-
* @param array $date_ranges An array representing the date ranges that will be passed to chart query.
|
62 |
-
* @return array Sources query
|
63 |
-
*/
|
64 |
-
public static function sources_query( $id_view, $date_ranges ) {
|
65 |
-
$reports_requests = array();
|
66 |
-
|
67 |
-
if ( isset( $_GET['ts'] ) ) {
|
68 |
-
$reports_requests[] = array(
|
69 |
-
'viewId' => $id_view,
|
70 |
-
'dateRanges' => $date_ranges,
|
71 |
-
'metrics' => self::set_metrics( array( 'ga:pageviews' ) ),
|
72 |
-
'includeEmptyRows' => true,
|
73 |
-
'pageSize' => 10,
|
74 |
-
'dimensions' => self::set_dimensions( 'ga:sourceMedium' ),
|
75 |
-
'orderBys' => self::set_order_bys( 'ga:pageviews', 'DESCENDING' ),
|
76 |
-
);
|
77 |
-
} else {
|
78 |
-
$reports_requests[] = array(
|
79 |
-
'viewId' => $id_view,
|
80 |
-
'dateRanges' => $date_ranges,
|
81 |
-
'metrics' => self::set_metrics( array(
|
82 |
-
'ga:pageviews',
|
83 |
-
'ga:uniquePageviews',
|
84 |
-
'ga:timeOnPage',
|
85 |
-
'ga:bounces',
|
86 |
-
'ga:entrances',
|
87 |
-
'ga:exits'
|
88 |
-
) ),
|
89 |
-
'includeEmptyRows' => true,
|
90 |
-
'pageSize' => 10,
|
91 |
-
'dimensions' => self::set_dimensions( 'ga:pagePath' ),
|
92 |
-
'orderBys' => self::set_order_bys( 'ga:pageviews', 'DESCENDING' ),
|
93 |
-
);
|
94 |
-
}
|
95 |
-
|
96 |
-
$query = array(
|
97 |
-
'reportRequests' => $reports_requests
|
98 |
-
);
|
99 |
-
|
100 |
-
return $query;
|
101 |
-
}
|
102 |
-
|
103 |
-
/**
|
104 |
-
* Preparing query for dashboard boxes
|
105 |
-
*
|
106 |
-
* @param int $id_view The Analytics view ID from which to retrieve data.
|
107 |
-
* @param array $date_ranges An array representing the date ranges that will be passed to chart query.
|
108 |
-
*
|
109 |
-
* @return array Dashboard boxes query
|
110 |
-
*/
|
111 |
-
public static function dashboard_boxes_query( $id_view, $date_ranges ) {
|
112 |
-
$reports_requests = array();
|
113 |
-
|
114 |
-
if ( isset( $_GET['ts'] ) ) {
|
115 |
-
$reports_requests[] = array(
|
116 |
-
'viewId' => $id_view,
|
117 |
-
'dateRanges' => $date_ranges,
|
118 |
-
'metrics' => self::set_metrics( array( 'ga:pageviews' ) ),
|
119 |
-
'includeEmptyRows' => true,
|
120 |
-
'pageSize' => 10,
|
121 |
-
'dimensions' => self::set_dimensions( 'ga:sourceMedium' ),
|
122 |
-
'orderBys' => self::set_order_bys( 'ga:pageviews', 'DESCENDING' ),
|
123 |
-
);
|
124 |
-
} else {
|
125 |
-
$reports_requests[] = array(
|
126 |
-
'viewId' => $id_view,
|
127 |
-
'dateRanges' => $date_ranges,
|
128 |
-
'metrics' => self::set_metrics( array(
|
129 |
-
'ga:pageviews',
|
130 |
-
'ga:uniquePageviews',
|
131 |
-
'ga:timeOnPage',
|
132 |
-
'ga:bounces',
|
133 |
-
'ga:entrances',
|
134 |
-
'ga:exits'
|
135 |
-
) ),
|
136 |
-
'includeEmptyRows' => true,
|
137 |
-
'pageSize' => 10,
|
138 |
-
'dimensions' => self::set_dimensions( 'ga:pagePath' ),
|
139 |
-
'orderBys' => self::set_order_bys( 'ga:pageviews', 'DESCENDING' ),
|
140 |
-
);
|
141 |
-
}
|
142 |
-
$query = array(
|
143 |
-
'reportRequests' => $reports_requests
|
144 |
-
);
|
145 |
-
|
146 |
-
return $query;
|
147 |
-
}
|
148 |
-
|
149 |
-
/**
|
150 |
-
* Preparing query for dashboard boxes
|
151 |
-
*
|
152 |
-
* @param int $id_view The Analytics view ID from which to retrieve data.
|
153 |
-
* @param string $date_range The start date for the query in the format YYYY-MM-DD or '7daysAgo'
|
154 |
-
*
|
155 |
-
* @return array Dashboard boxes query
|
156 |
-
* @deprecated
|
157 |
-
*
|
158 |
-
*/
|
159 |
-
public static function dashboard_boxes_query_old($id_view, $date_range)
|
160 |
-
{
|
161 |
-
$reports_requests = [];
|
162 |
-
$daysAgo = isset($_GET['th']) ? '30daysAgo' : '7daysAgo';
|
163 |
-
|
164 |
-
if (isset($_GET['ts'])) {
|
165 |
-
$reports_requests[] = [
|
166 |
-
'viewId' => $id_view,
|
167 |
-
'dateRanges' => self::set_date_ranges($daysAgo, 'yesterday'),
|
168 |
-
'metrics' => self::set_metrics(['ga:pageviews']),
|
169 |
-
'includeEmptyRows' => true,
|
170 |
-
'pageSize' => 10,
|
171 |
-
'dimensions' => self::set_dimensions('ga:sourceMedium'),
|
172 |
-
'orderBys' => self::set_order_bys('ga:pageviews', 'DESCENDING'),
|
173 |
-
];
|
174 |
-
} else {
|
175 |
-
$reports_requests[] = [
|
176 |
-
'viewId' => $id_view,
|
177 |
-
'dateRanges' => self::set_date_ranges($daysAgo, 'yesterday'),
|
178 |
-
'metrics' => self::set_metrics([
|
179 |
-
'ga:pageviews',
|
180 |
-
'ga:uniquePageviews',
|
181 |
-
'ga:timeOnPage',
|
182 |
-
'ga:bounces',
|
183 |
-
'ga:entrances',
|
184 |
-
'ga:exits',
|
185 |
-
]),
|
186 |
-
'includeEmptyRows' => true,
|
187 |
-
'pageSize' => 10,
|
188 |
-
'dimensions' => self::set_dimensions('ga:pagePath'),
|
189 |
-
'orderBys' => self::set_order_bys('ga:pageviews', 'DESCENDING'),
|
190 |
-
];
|
191 |
-
}
|
192 |
-
$query = [
|
193 |
-
'reportRequests' => $reports_requests,
|
194 |
-
];
|
195 |
-
|
196 |
-
return $query;
|
197 |
-
}
|
198 |
-
|
199 |
-
/**
|
200 |
-
* Preparing query for stats boxes
|
201 |
-
*
|
202 |
-
* @param int $id_view The Analytics view ID from which to retrieve data.
|
203 |
-
*
|
204 |
-
* @return array Boxes query
|
205 |
-
*/
|
206 |
-
public static function boxes_query( $id_view ) {
|
207 |
-
$range = isset( $_GET['th'] ) ? '30daysAgo' : '7daysAgo';
|
208 |
-
$range_s_prev = isset( $_GET['th'] ) ? '60daysAgo' : '14daysAgo';
|
209 |
-
$range_e_prev = isset( $_GET['th'] ) ? '31daysAgo' : '8daysAgo';
|
210 |
-
$reports_requests = array();
|
211 |
-
$reports_requests[] = array(
|
212 |
-
'viewId' => $id_view,
|
213 |
-
'dateRanges' => self::set_date_ranges( $range, 'yesterday', $range_s_prev, $range_e_prev ),
|
214 |
-
'metrics' => self::set_metrics( array(
|
215 |
-
'ga:users',
|
216 |
-
'ga:pageviews',
|
217 |
-
'ga:pageviewsPerSession',
|
218 |
-
'ga:BounceRate'
|
219 |
-
) ),
|
220 |
-
'includeEmptyRows' => true,
|
221 |
-
'dimensions' => self::set_dimensions( 'ga:date' )
|
222 |
-
);
|
223 |
-
$query = array(
|
224 |
-
'reportRequests' => $reports_requests
|
225 |
-
);
|
226 |
-
|
227 |
-
return $query;
|
228 |
-
}
|
229 |
-
|
230 |
-
/**
|
231 |
-
* Preparing query for chart
|
232 |
-
*
|
233 |
-
* @param int $id_view The Analytics view ID from which to retrieve data.
|
234 |
-
* @param array $date_ranges An array representing the date ranges that will be passed to chart query.
|
235 |
-
* @param string $metric A metric expression
|
236 |
-
*
|
237 |
-
* @return array Chart query
|
238 |
-
*/
|
239 |
-
public static function main_chart_query( $id_view, $date_ranges = null, $metric = null ) {
|
240 |
-
if ( true === empty( $metric ) ) {
|
241 |
-
$metric = 'ga:pageviews';
|
242 |
-
} else {
|
243 |
-
$metric = 'ga:' . $metric;
|
244 |
-
}
|
245 |
-
|
246 |
-
$reports_requests = array();
|
247 |
-
$reports_requests[] = array(
|
248 |
-
'viewId' => $id_view,
|
249 |
-
'dateRanges' => $date_ranges,
|
250 |
-
'metrics' => self::set_metrics( $metric ),
|
251 |
-
'includeEmptyRows' => true,
|
252 |
-
'dimensions' => self::set_dimensions( 'ga:date' )
|
253 |
-
);
|
254 |
-
$query = array(
|
255 |
-
'reportRequests' => $reports_requests
|
256 |
-
);
|
257 |
-
|
258 |
-
return $query;
|
259 |
-
}
|
260 |
-
|
261 |
-
/**
|
262 |
-
* Preparing query for chart
|
263 |
-
*
|
264 |
-
* @param int $id_view The Analytics view ID from which to retrieve data.
|
265 |
-
* @param string $date_range The start date for the query in the format YYYY-MM-DD or '7daysAgo'
|
266 |
-
* @param string $metric A metric expression
|
267 |
-
*
|
268 |
-
* @return array Chart query
|
269 |
-
* @deprecated
|
270 |
-
*
|
271 |
-
*/
|
272 |
-
public static function main_chart_query_old($id_view, $date_range = null, $metric = null)
|
273 |
-
{
|
274 |
-
if (empty($date_range)) {
|
275 |
-
$date_ranges = self::set_date_ranges('7daysAgo', 'yesterday', '14daysAgo', '8daysAgo');
|
276 |
-
} else {
|
277 |
-
$date_ranges = self::set_date_ranges($date_range, 'yesterday', '14daysAgo', '8daysAgo');
|
278 |
-
}
|
279 |
-
|
280 |
-
if (empty($metric)) {
|
281 |
-
$metric = 'ga:pageviews';
|
282 |
-
} else {
|
283 |
-
$metric = 'ga:' . $metric;
|
284 |
-
}
|
285 |
-
|
286 |
-
$reports_requests = [];
|
287 |
-
$reports_requests[] = [
|
288 |
-
'viewId' => $id_view,
|
289 |
-
'dateRanges' => $date_ranges,
|
290 |
-
'metrics' => self::set_metrics($metric),
|
291 |
-
'includeEmptyRows' => true,
|
292 |
-
'dimensions' => self::set_dimensions('ga:date'),
|
293 |
-
];
|
294 |
-
$query = [
|
295 |
-
'reportRequests' => $reports_requests,
|
296 |
-
];
|
297 |
-
|
298 |
-
return $query;
|
299 |
-
}
|
300 |
-
|
301 |
-
/**
|
302 |
-
* Preparing query for gender chart
|
303 |
-
*
|
304 |
-
* @param int $id_view The Analytics view ID from which to retrieve data.
|
305 |
-
* @param array $date_ranges An array representing the date ranges that will be passed to chart query.
|
306 |
-
* @param string $metric A metric expression
|
307 |
-
*
|
308 |
-
* @return array Chart query
|
309 |
-
*/
|
310 |
-
public static function gender_chart_query( $id_view, $date_ranges = null, $metric = null ) {
|
311 |
-
if ( true === empty( $date_ranges ) ) {
|
312 |
-
$date_ranges = self::set_date_ranges( '7daysAgo', 'yesterday', '14daysAgo', '8daysAgo' );
|
313 |
-
}
|
314 |
-
|
315 |
-
$reports_requests = array();
|
316 |
-
$reports_requests[] = array(
|
317 |
-
'viewId' => $id_view,
|
318 |
-
'dateRanges' => $date_ranges,
|
319 |
-
'metrics' => self::set_metrics( 'ga:sessions' ),
|
320 |
-
'includeEmptyRows' => true,
|
321 |
-
'dimensions' => self::set_dimensions( 'ga:userGender' )
|
322 |
-
);
|
323 |
-
$query = array(
|
324 |
-
'reportRequests' => $reports_requests
|
325 |
-
);
|
326 |
-
|
327 |
-
return $query;
|
328 |
-
}
|
329 |
-
|
330 |
-
/**
|
331 |
-
* Preparing query for device chart.
|
332 |
-
*
|
333 |
-
* @param int $id_view The Analytics view ID from which to retrieve data.
|
334 |
-
* @param array $date_ranges An array representing the date ranges that will be passed to chart query.
|
335 |
-
* @param string $metric A metric expression
|
336 |
-
*
|
337 |
-
* @return array Chart query
|
338 |
-
* @since 2.5.2
|
339 |
-
*/
|
340 |
-
public static function device_chart_query( $id_view, $date_ranges = null, $metric = null ) {
|
341 |
-
return array(
|
342 |
-
'reportRequests' => array(
|
343 |
-
array(
|
344 |
-
'viewId' => $id_view,
|
345 |
-
'dateRanges' => $date_ranges,
|
346 |
-
'metrics' => self::set_metrics( 'ga:sessions' ),
|
347 |
-
'includeEmptyRows' => true,
|
348 |
-
'dimensions' => self::set_dimensions( 'ga:deviceCategory' )
|
349 |
-
)
|
350 |
-
)
|
351 |
-
);
|
352 |
-
}
|
353 |
-
|
354 |
-
/**
|
355 |
-
* Preparing query for age chart
|
356 |
-
*
|
357 |
-
* @param int $id_view The Analytics view ID from which to retrieve data.
|
358 |
-
* @param array $date_ranges An array representing the date ranges that will be passed to chart query.
|
359 |
-
* @param string $metric A metric expression
|
360 |
-
*
|
361 |
-
* @return array Chart query
|
362 |
-
*/
|
363 |
-
public static function age_chart_query( $id_view, $date_ranges = null, $metric = null ) {
|
364 |
-
if ( true === empty( $date_ranges ) ) {
|
365 |
-
$date_ranges = self::set_date_ranges( '7daysAgo', 'yesterday', '14daysAgo', '8daysAgo' );
|
366 |
-
}
|
367 |
-
|
368 |
-
$reports_requests = array();
|
369 |
-
$reports_requests[] = array(
|
370 |
-
'viewId' => $id_view,
|
371 |
-
'dateRanges' => $date_ranges,
|
372 |
-
'metrics' => self::set_metrics( 'ga:sessions' ),
|
373 |
-
'includeEmptyRows' => true,
|
374 |
-
'dimensions' => self::set_dimensions( 'ga:userAgeBracket' )
|
375 |
-
);
|
376 |
-
$query = array(
|
377 |
-
'reportRequests' => $reports_requests
|
378 |
-
);
|
379 |
-
|
380 |
-
return $query;
|
381 |
-
}
|
382 |
-
|
383 |
-
/**
|
384 |
-
* Setting order for requests
|
385 |
-
*
|
386 |
-
* @param string $name The field which to sort by. The default sort order is ascending. Example: ga:browser.
|
387 |
-
* @param string $sort The sorting order for the field. 'ASCENDING' or 'DESCENDING'
|
388 |
-
*
|
389 |
-
* @return array OrderBys
|
390 |
-
*/
|
391 |
-
public static function set_order_bys( $name, $sort ) {
|
392 |
-
$order = array();
|
393 |
-
$order[] = array(
|
394 |
-
'fieldName' => $name,
|
395 |
-
'sortOrder' => $sort,
|
396 |
-
);
|
397 |
-
|
398 |
-
return $order;
|
399 |
-
}
|
400 |
-
|
401 |
-
/**
|
402 |
-
* Setting metrics for requests
|
403 |
-
*
|
404 |
-
* @param mixed $expression A metric expression or array of expressions
|
405 |
-
*
|
406 |
-
* @return array Metrics
|
407 |
-
*/
|
408 |
-
public static function set_metrics( $expression ) {
|
409 |
-
$metrics = array();
|
410 |
-
if ( is_array( $expression ) ) {
|
411 |
-
foreach ( $expression as $exp ) {
|
412 |
-
$metrics[] = array(
|
413 |
-
'expression' => $exp
|
414 |
-
);
|
415 |
-
}
|
416 |
-
} else {
|
417 |
-
$metrics[] = array(
|
418 |
-
'expression' => $expression
|
419 |
-
);
|
420 |
-
}
|
421 |
-
|
422 |
-
return $metrics;
|
423 |
-
}
|
424 |
-
|
425 |
-
/**
|
426 |
-
* Setting dimensions for requests
|
427 |
-
*
|
428 |
-
* @param string $name Name of the dimension to fetch, for example ga:browser.
|
429 |
-
*
|
430 |
-
* @return array Dimensions
|
431 |
-
*/
|
432 |
-
public static function set_dimensions( $name ) {
|
433 |
-
$dimensions = array();
|
434 |
-
$dimensions[] = array(
|
435 |
-
'name' => $name
|
436 |
-
);
|
437 |
-
|
438 |
-
return $dimensions;
|
439 |
-
}
|
440 |
-
|
441 |
-
/**
|
442 |
-
* Setting date ranges for requests
|
443 |
-
*
|
444 |
-
* @param string $start_date The start date for the query in the format YYYY-MM-DD.
|
445 |
-
* @param string $end_date The end date for the query in the format YYYY-MM-DD.
|
446 |
-
* @param string $prev_start_date The start date (second range) for the query in the format YYYY-MM-DD.
|
447 |
-
* @param string $prev_end_date The start date (second range) for the query in the format YYYY-MM-DD.
|
448 |
-
*
|
449 |
-
* @return array Date ranges
|
450 |
-
*/
|
451 |
-
public static function set_date_ranges( $start_date, $end_date, $prev_start_date = '', $prev_end_date = '' ) {
|
452 |
-
$date_danges = array();
|
453 |
-
$date_danges[] = array(
|
454 |
-
'startDate' => $start_date,
|
455 |
-
'endDate' => $end_date,
|
456 |
-
);
|
457 |
-
if ( !empty( $prev_start_date ) and ! empty( $prev_end_date ) ) {
|
458 |
-
$date_danges[] = array(
|
459 |
-
'startDate' => $prev_start_date,
|
460 |
-
'endDate' => $prev_end_date,
|
461 |
-
);
|
462 |
-
}
|
463 |
-
|
464 |
-
return $date_danges;
|
465 |
-
}
|
466 |
-
|
467 |
-
/**
|
468 |
-
* Preparing response for data received from analytics
|
469 |
-
*
|
470 |
-
* @param array $data Analytics response
|
471 |
-
*
|
472 |
-
* @return array Response rows
|
473 |
-
*/
|
474 |
-
public static function prepare_response( $data ) {
|
475 |
-
$data = self::get_reports_from_response( $data );
|
476 |
-
self::handle_more_reports( $data );
|
477 |
-
$report = self::get_single_report( $data );
|
478 |
-
self::get_report_column_header( $report );
|
479 |
-
$report_data = self::get_report_data( $report );
|
480 |
-
self::get_totals( $report_data );
|
481 |
-
self::get_row_count( $report_data );
|
482 |
-
$rows = self::get_rows( $report_data );
|
483 |
-
|
484 |
-
return $rows;
|
485 |
-
}
|
486 |
-
|
487 |
-
/**
|
488 |
-
* Get dimensions from response row
|
489 |
-
*
|
490 |
-
* @param array $row Analytics response row
|
491 |
-
*
|
492 |
-
* @return array|bool Dimensions
|
493 |
-
*/
|
494 |
-
public static function get_dimensions( $row ) {
|
495 |
-
if ( !empty( $row[ 'dimensions' ] ) ) {
|
496 |
-
return $row[ 'dimensions' ];
|
497 |
-
}
|
498 |
-
|
499 |
-
return false;
|
500 |
-
}
|
501 |
-
|
502 |
-
/**
|
503 |
-
* Get metrics from response row
|
504 |
-
*
|
505 |
-
* @param array $row Analytics response row
|
506 |
-
*
|
507 |
-
* @return array|bool Metrics
|
508 |
-
*/
|
509 |
-
public static function get_metrics( $row ) {
|
510 |
-
if ( !empty( $row[ 'metrics' ] ) ) {
|
511 |
-
return $row[ 'metrics' ];
|
512 |
-
}
|
513 |
-
|
514 |
-
return false;
|
515 |
-
}
|
516 |
-
|
517 |
-
/**
|
518 |
-
* Get row from response report data
|
519 |
-
*
|
520 |
-
* @param array $report_data Analytics response report data
|
521 |
-
*
|
522 |
-
* @return array|bool Rows
|
523 |
-
*/
|
524 |
-
public static function get_rows( $report_data ) {
|
525 |
-
if ( !empty( $report_data[ 'rows' ] ) ) {
|
526 |
-
return $report_data[ 'rows' ];
|
527 |
-
}
|
528 |
-
|
529 |
-
return false;
|
530 |
-
}
|
531 |
-
|
532 |
-
/**
|
533 |
-
* Get row count from response report data
|
534 |
-
*
|
535 |
-
* @param array $report_data Analytics response report data
|
536 |
-
*
|
537 |
-
* @return array|bool Row count
|
538 |
-
*/
|
539 |
-
public static function get_row_count( $report_data ) {
|
540 |
-
if ( !empty( $report_data[ 'rowCount' ] ) ) {
|
541 |
-
return $report_data[ 'rowCount' ];
|
542 |
-
}
|
543 |
-
|
544 |
-
return false;
|
545 |
-
}
|
546 |
-
|
547 |
-
/**
|
548 |
-
* Get totals from response report data
|
549 |
-
*
|
550 |
-
* @param array $report_data Analytics response report data
|
551 |
-
*
|
552 |
-
* @return array|bool Totals
|
553 |
-
*/
|
554 |
-
public static function get_totals( $report_data ) {
|
555 |
-
if ( !empty( $report_data[ 'totals' ] ) ) {
|
556 |
-
return $report_data[ 'totals' ];
|
557 |
-
}
|
558 |
-
|
559 |
-
return false;
|
560 |
-
}
|
561 |
-
|
562 |
-
/**
|
563 |
-
* Get reports from response data
|
564 |
-
*
|
565 |
-
* @param array $data Analytics response data
|
566 |
-
*
|
567 |
-
* @return array|bool Reports
|
568 |
-
*/
|
569 |
-
public static function get_reports_from_response( $data ) {
|
570 |
-
if ( !empty( $data[ 'reports' ] ) ) {
|
571 |
-
return $data[ 'reports' ];
|
572 |
-
}
|
573 |
-
|
574 |
-
return false;
|
575 |
-
}
|
576 |
-
|
577 |
-
/**
|
578 |
-
* Show info for multiple data
|
579 |
-
*
|
580 |
-
* @param array $data Analytics response data
|
581 |
-
*
|
582 |
-
*/
|
583 |
-
public static function handle_more_reports( $data ) {
|
584 |
-
if ( count( $data ) > 1 ) {
|
585 |
-
echo 'more than one report';
|
586 |
-
}
|
587 |
-
}
|
588 |
-
|
589 |
-
/**
|
590 |
-
* Show info for multiple rows
|
591 |
-
*
|
592 |
-
* @param array $rows Analytics response rows
|
593 |
-
*
|
594 |
-
*/
|
595 |
-
public static function handle_more_rows( $rows ) {
|
596 |
-
if ( count( $rows ) > 1 ) {
|
597 |
-
echo 'more than one row';
|
598 |
-
}
|
599 |
-
}
|
600 |
-
|
601 |
-
/**
|
602 |
-
* Get single report from response data
|
603 |
-
*
|
604 |
-
* @param array $data Analytics response data
|
605 |
-
*
|
606 |
-
* @return array|bool Report
|
607 |
-
*/
|
608 |
-
public static function get_single_report( $data ) {
|
609 |
-
if ( !empty( $data ) ) {
|
610 |
-
foreach ( $data as $report ) {
|
611 |
-
if ( !empty( $report ) ) {
|
612 |
-
return $report;
|
613 |
-
}
|
614 |
-
}
|
615 |
-
}
|
616 |
-
|
617 |
-
return false;
|
618 |
-
}
|
619 |
-
|
620 |
-
/**
|
621 |
-
* Get single row from response data rows
|
622 |
-
*
|
623 |
-
* @param array $rows Analytics response data rows
|
624 |
-
*
|
625 |
-
* @return array|bool Row
|
626 |
-
*/
|
627 |
-
public static function get_single_row( $rows ) {
|
628 |
-
if ( !empty( $rows ) ) {
|
629 |
-
foreach ( $rows as $row ) {
|
630 |
-
if ( !empty( $row ) ) {
|
631 |
-
return $row;
|
632 |
-
}
|
633 |
-
}
|
634 |
-
}
|
635 |
-
|
636 |
-
return false;
|
637 |
-
}
|
638 |
-
|
639 |
-
/**
|
640 |
-
* Get column header from response data
|
641 |
-
*
|
642 |
-
* @param array $data Analytics response data
|
643 |
-
*
|
644 |
-
* @return array Column header
|
645 |
-
*/
|
646 |
-
public static function get_report_column_header( $data ) {
|
647 |
-
if ( !empty( $data[ 'columnHeader' ] ) ) {
|
648 |
-
return $data[ 'columnHeader' ];
|
649 |
-
}
|
650 |
-
|
651 |
-
return false;
|
652 |
-
}
|
653 |
-
|
654 |
-
/**
|
655 |
-
* Get report data from response data
|
656 |
-
*
|
657 |
-
* @param array $data Analytics response data
|
658 |
-
*
|
659 |
-
* @return array data
|
660 |
-
*/
|
661 |
-
public static function get_report_data( $data ) {
|
662 |
-
if ( !empty( $data[ 'data' ] ) ) {
|
663 |
-
return $data[ 'data' ];
|
664 |
-
}
|
665 |
-
|
666 |
-
return false;
|
667 |
-
}
|
668 |
-
|
669 |
-
/**
|
670 |
-
* Get chart from response data
|
671 |
-
*
|
672 |
-
* @param array $response_data Analytics response data
|
673 |
-
*
|
674 |
-
* @return array chart data
|
675 |
-
*/
|
676 |
-
public static function get_chart( $response_data, $period_in_days = 7 ) {
|
677 |
-
$chart_data = array();
|
678 |
-
if ( ! empty( $response_data ) ) {
|
679 |
-
$data = ( ! empty( $response_data['reports'] ) && ! empty( $response_data['reports'][0] ) && ! empty( $response_data['reports'][0]['data'] ) ) ? $response_data['reports'][0]['data'] : array();
|
680 |
-
$rows = ( ! empty( $data['rows'] ) ) ? $data['rows'] : array();
|
681 |
-
if ( ! empty( $rows ) ) {
|
682 |
-
foreach ( $rows as $key => $row ) {
|
683 |
-
if ( $key < $period_in_days ) {
|
684 |
-
$chart_data[ $key ]['previous'] = ! empty( $row['metrics'][1]['values'][0] ) ? $row['metrics'][1]['values'][0] : 0;
|
685 |
-
$chart_data[ $key ]['previous-day'] = date( 'M j', strtotime( $row['dimensions'][0] ) );
|
686 |
-
} else {
|
687 |
-
$chart_data[ $key - $period_in_days ]['day'] = date( 'M j', strtotime( $row['dimensions'][0] ) );
|
688 |
-
$chart_data[ $key - $period_in_days ]['current'] = ! empty( $row['metrics'][0]['values'][0] ) ? $row['metrics'][0]['values'][0] : 0;
|
689 |
-
$chart_data['date'] = strtotime( $row['dimensions'][0] );
|
690 |
-
}
|
691 |
-
}
|
692 |
-
}
|
693 |
-
}
|
694 |
-
|
695 |
-
return $chart_data;
|
696 |
-
}
|
697 |
-
|
698 |
-
/**
|
699 |
-
* Get gender chart from response data
|
700 |
-
*
|
701 |
-
* @param array $response_data Analytics response data
|
702 |
-
*
|
703 |
-
* @return array chart data
|
704 |
-
*/
|
705 |
-
public static function get_gender_chart( $response_data ) {
|
706 |
-
$chart_data = [];
|
707 |
-
if ( !empty( $response_data ) ) {
|
708 |
-
$data = (!empty( $response_data[ 'reports' ] ) && !empty( $response_data[ 'reports' ][ 0 ] ) && !empty( $response_data[ 'reports' ][ 0 ][ 'data' ] ) ) ? $response_data[ 'reports' ][ 0 ][ 'data' ] : array();
|
709 |
-
$rows = (!empty( $data[ 'rows' ] ) ) ? $data[ 'rows' ] : array();
|
710 |
-
if ( !empty( $rows ) ) {
|
711 |
-
foreach ( $rows as $key => $row ) {
|
712 |
-
$chart_data[$row['dimensions'][0]] = self::get_metric_value($row['metrics']);
|
713 |
-
}
|
714 |
-
}
|
715 |
-
}
|
716 |
-
|
717 |
-
return $chart_data;
|
718 |
-
}
|
719 |
-
|
720 |
-
/**
|
721 |
-
* Get device chart from response data.
|
722 |
-
*
|
723 |
-
* @param array $response_data Analytics response data array.
|
724 |
-
*
|
725 |
-
* @return array Chart data array.
|
726 |
-
*/
|
727 |
-
public static function get_device_chart( $response_data ) {
|
728 |
-
$chart_data = [];
|
729 |
-
if ( false === empty( $response_data ) ) {
|
730 |
-
$data = (false === empty( $response_data[ 'reports' ] ) && !empty( $response_data[ 'reports' ][ 0 ] ) && !empty( $response_data[ 'reports' ][ 0 ][ 'data' ] ) ) ? $response_data[ 'reports' ][ 0 ][ 'data' ] : array();
|
731 |
-
$rows = ( false === empty( $data['rows'] ) ) ? $data['rows'] : array();
|
732 |
-
if ( false === empty( $rows ) ) {
|
733 |
-
foreach ( $rows as $row ) {
|
734 |
-
$chart_data[$row['dimensions'][0]] = self::get_metric_value($row['metrics']);
|
735 |
-
}
|
736 |
-
}
|
737 |
-
}
|
738 |
-
|
739 |
-
return $chart_data;
|
740 |
-
}
|
741 |
-
|
742 |
-
/**
|
743 |
-
* Get the value of metric data response.
|
744 |
-
*
|
745 |
-
* @param $metrics
|
746 |
-
*
|
747 |
-
* @return mixed
|
748 |
-
*/
|
749 |
-
private static function get_metric_value($metrics)
|
750 |
-
{
|
751 |
-
if (is_array($metrics)) {
|
752 |
-
foreach($metrics as $metric) {
|
753 |
-
$values[] = $metric['values'][0];
|
754 |
-
}
|
755 |
-
}
|
756 |
-
|
757 |
-
return $values[0];
|
758 |
-
}
|
759 |
-
|
760 |
-
/**
|
761 |
-
* Get gender chart from response data
|
762 |
-
*
|
763 |
-
* @param array $response_data Analytics response data
|
764 |
-
*
|
765 |
-
* @return array chart data
|
766 |
-
*/
|
767 |
-
public static function get_age_chart( $response_data ) {
|
768 |
-
$chart_data = [];
|
769 |
-
if ( !empty( $response_data ) ) {
|
770 |
-
$data = (!empty( $response_data[ 'reports' ] ) && !empty( $response_data[ 'reports' ][ 0 ] ) && !empty( $response_data[ 'reports' ][ 0 ][ 'data' ] ) ) ? $response_data[ 'reports' ][ 0 ][ 'data' ] : array();
|
771 |
-
$rows = (!empty( $data[ 'rows' ] ) ) ? $data[ 'rows' ] : array();
|
772 |
-
if ( !empty( $rows ) ) {
|
773 |
-
foreach ( $rows as $key => $row ) {
|
774 |
-
$chart_data[$row['dimensions'][0]] = self::get_metric_value($row['metrics']);
|
775 |
-
}
|
776 |
-
}
|
777 |
-
}
|
778 |
-
|
779 |
-
return $chart_data;
|
780 |
-
}
|
781 |
-
|
782 |
-
/**
|
783 |
-
* Get dasboard chart from response data
|
784 |
-
*
|
785 |
-
* @param array $response_data Analytics response data
|
786 |
-
*
|
787 |
-
* @return array dashboard chart data
|
788 |
-
*/
|
789 |
-
public static function get_dashboard_chart( $response_data ) {
|
790 |
-
$chart_data = array();
|
791 |
-
if ( !empty( $response_data ) ) {
|
792 |
-
$data = (!empty( $response_data[ 'reports' ] ) && !empty( $response_data[ 'reports' ][ 0 ] ) && !empty( $response_data[ 'reports' ][ 0 ][ 'data' ] ) ) ? $response_data[ 'reports' ][ 0 ][ 'data' ] : array();
|
793 |
-
$rows = (!empty( $data[ 'rows' ] ) ) ? $data[ 'rows' ] : array();
|
794 |
-
if ( !empty( $rows ) ) {
|
795 |
-
foreach ( $rows as $row ) {
|
796 |
-
$chart_data[] = array(
|
797 |
-
'day' => date( 'M j', strtotime( $row[ 'dimensions' ][ 0 ] ) ),
|
798 |
-
'current' => !empty( $row[ 'metrics' ][ 0 ][ 'values' ][ 0 ] ) ? $row[ 'metrics' ][ 0 ][ 'values' ][ 0 ] : 0
|
799 |
-
);
|
800 |
-
}
|
801 |
-
}
|
802 |
-
}
|
803 |
-
|
804 |
-
return $chart_data;
|
805 |
-
}
|
806 |
-
|
807 |
-
/**
|
808 |
-
* Get boxes from response data
|
809 |
-
*
|
810 |
-
* @param array $data Analytics response data
|
811 |
-
*
|
812 |
-
* @return array boxes data
|
813 |
-
*/
|
814 |
-
public static function get_boxes( $data ) {
|
815 |
-
if ( !empty( $data ) ) {
|
816 |
-
$data = self::get_reports_from_response( $data );
|
817 |
-
self::handle_more_reports( $data );
|
818 |
-
$report = self::get_single_report( $data );
|
819 |
-
self::get_report_column_header( $report );
|
820 |
-
$report_data = self::get_report_data( $report );
|
821 |
-
$totals = self::get_totals( $report_data );
|
822 |
-
|
823 |
-
return self::get_boxes_from_totals( $totals );
|
824 |
-
}
|
825 |
-
}
|
826 |
-
|
827 |
-
/**
|
828 |
-
* Get boxes from totals
|
829 |
-
*
|
830 |
-
* @param array $totals Analytics response totals
|
831 |
-
*
|
832 |
-
* @return array boxes data
|
833 |
-
*/
|
834 |
-
public static function get_boxes_from_totals( $totals ) {
|
835 |
-
if ( !empty( $totals ) ) {
|
836 |
-
$boxes_data = array();
|
837 |
-
foreach ( $totals as $key => $total ) {
|
838 |
-
if ( $key == 0 ) {
|
839 |
-
$boxes_data[ 'Users' ][ 'current' ] = $total[ 'values' ][ 0 ];
|
840 |
-
$boxes_data[ 'Pageviews' ][ 'current' ] = $total[ 'values' ][ 1 ];
|
841 |
-
$boxes_data[ 'PageviewsPerSession' ][ 'current' ] = $total[ 'values' ][ 2 ];
|
842 |
-
$boxes_data[ 'BounceRate' ][ 'current' ] = round( $total[ 'values' ][ 3 ], 2 );
|
843 |
-
} else {
|
844 |
-
$boxes_data[ 'Users' ][ 'previous' ] = $total[ 'values' ][ 0 ];
|
845 |
-
$boxes_data[ 'Pageviews' ][ 'previous' ] = $total[ 'values' ][ 1 ];
|
846 |
-
$boxes_data[ 'PageviewsPerSession' ][ 'previous' ] = $total[ 'values' ][ 2 ];
|
847 |
-
$boxes_data[ 'BounceRate' ][ 'previous' ] = round( $total[ 'values' ][ 3 ], 2 );
|
848 |
-
}
|
849 |
-
}
|
850 |
-
|
851 |
-
return self::prepare_boxes( $boxes_data );
|
852 |
-
}
|
853 |
-
|
854 |
-
return false;
|
855 |
-
}
|
856 |
-
|
857 |
-
/**
|
858 |
-
* Prepare boxes data
|
859 |
-
*
|
860 |
-
* @param array $boxes_data Boxes data
|
861 |
-
*
|
862 |
-
* @return array boxes data
|
863 |
-
*/
|
864 |
-
public static function prepare_boxes( $boxes_data ) {
|
865 |
-
$boxes_data[ 'Users' ][ 'diff' ] = ( $boxes_data[ 'Users' ][ 'previous' ] > 0 ) ? round( ( $boxes_data[ 'Users' ][ 'current' ] - $boxes_data[ 'Users' ][ 'previous' ] ) / $boxes_data[ 'Users' ][ 'previous' ] * 100, 2 ) : 100;
|
866 |
-
$boxes_data[ 'Pageviews' ][ 'diff' ] = ( $boxes_data[ 'Pageviews' ][ 'previous' ] > 0 ) ? round( ( $boxes_data[ 'Pageviews' ][ 'current' ] - $boxes_data[ 'Pageviews' ][ 'previous' ] ) / $boxes_data[ 'Pageviews' ][ 'previous' ] * 100, 2 ) : 100;
|
867 |
-
$boxes_data[ 'PageviewsPerSession' ][ 'diff' ] = ( $boxes_data[ 'PageviewsPerSession' ][ 'previous' ] > 0 ) ? round( ( $boxes_data[ 'PageviewsPerSession' ][ 'current' ] - $boxes_data[ 'PageviewsPerSession' ][ 'previous' ] ) / $boxes_data[ 'PageviewsPerSession' ][ 'previous' ] * 100, 2 ) : 100;
|
868 |
-
$boxes_data[ 'BounceRate' ][ 'diff' ] = ( $boxes_data[ 'BounceRate' ][ 'previous' ] > 0 ) ? round( ( $boxes_data[ 'BounceRate' ][ 'current' ] - $boxes_data[ 'BounceRate' ][ 'previous' ] ) / $boxes_data[ 'BounceRate' ][ 'previous' ] * 100, 2 ) : 100;
|
869 |
-
$boxes_data[ 'Users' ][ 'diff' ] = ( $boxes_data[ 'Users' ][ 'previous' ] == 0 && $boxes_data[ 'Users' ][ 'current' ] == 0 ) ? 0 : $boxes_data[ 'Users' ][ 'diff' ];
|
870 |
-
$boxes_data[ 'Pageviews' ][ 'diff' ] = ( $boxes_data[ 'Pageviews' ][ 'previous' ] == 0 && $boxes_data[ 'Pageviews' ][ 'current' ] == 0 ) ? 0 : $boxes_data[ 'Pageviews' ][ 'diff' ];
|
871 |
-
$boxes_data[ 'PageviewsPerSession' ][ 'diff' ] = ( $boxes_data[ 'PageviewsPerSession' ][ 'previous' ] == 0 && $boxes_data[ 'PageviewsPerSession' ][ 'current' ] == 0 ) ? 0 : $boxes_data[ 'PageviewsPerSession' ][ 'diff' ];
|
872 |
-
$boxes_data[ 'BounceRate' ][ 'diff' ] = ( $boxes_data[ 'BounceRate' ][ 'previous' ] == 0 && $boxes_data[ 'BounceRate' ][ 'current' ] == 0 ) ? 0 : $boxes_data[ 'BounceRate' ][ 'diff' ];
|
873 |
-
$boxes_data[ 'Users' ][ 'label' ] = 'Users';
|
874 |
-
$boxes_data[ 'Pageviews' ][ 'label' ] = 'Pageviews';
|
875 |
-
$boxes_data[ 'PageviewsPerSession' ][ 'label' ] = 'Pages / Session';
|
876 |
-
$boxes_data[ 'BounceRate' ][ 'label' ] = 'Bounce Rate';
|
877 |
-
$boxes_data[ 'Users' ][ 'comparison' ] = $boxes_data[ 'Users' ][ 'current' ] . ' vs ' . $boxes_data[ 'Users' ][ 'previous' ];
|
878 |
-
$boxes_data[ 'Pageviews' ][ 'comparison' ] = $boxes_data[ 'Pageviews' ][ 'current' ] . ' vs ' . $boxes_data[ 'Pageviews' ][ 'previous' ];
|
879 |
-
$boxes_data[ 'PageviewsPerSession' ][ 'comparison' ] = self::number_format_clean( $boxes_data[ 'PageviewsPerSession' ][ 'current' ], 2, '.', ',' ) . ' vs ' . self::number_format_clean( $boxes_data[ 'PageviewsPerSession' ][ 'previous' ], 2, '.', ',' );
|
880 |
-
$boxes_data[ 'BounceRate' ][ 'comparison' ] = self::number_format_clean( $boxes_data[ 'BounceRate' ][ 'current' ], 2, '.', ',' ) . '% vs ' . self::number_format_clean( $boxes_data[ 'BounceRate' ][ 'previous' ], 2, '.', ',' ) . '%';
|
881 |
-
$boxes_data[ 'Users' ][ 'color' ] = ( $boxes_data[ 'Users' ][ 'diff' ] > 0 ) ? 'green' : 'red';
|
882 |
-
$boxes_data[ 'Pageviews' ][ 'color' ] = ( $boxes_data[ 'Pageviews' ][ 'diff' ] > 0 ) ? 'green' : 'red';
|
883 |
-
$boxes_data[ 'PageviewsPerSession' ][ 'color' ] = ( $boxes_data[ 'PageviewsPerSession' ][ 'diff' ] > 0 ) ? 'green' : 'red';
|
884 |
-
$boxes_data[ 'BounceRate' ][ 'color' ] = ( $boxes_data[ 'BounceRate' ][ 'diff' ] > 0 ) ? 'red' : 'green';
|
885 |
-
$boxes_data[ 'Users' ][ 'color' ] = ( $boxes_data[ 'Users' ][ 'diff' ] != 0 ) ? $boxes_data[ 'Users' ][ 'color' ] : 'black';
|
886 |
-
$boxes_data[ 'Pageviews' ][ 'color' ] = ( $boxes_data[ 'Pageviews' ][ 'diff' ] != 0 ) ? $boxes_data[ 'Pageviews' ][ 'color' ] : 'black';
|
887 |
-
$boxes_data[ 'PageviewsPerSession' ][ 'color' ] = ( $boxes_data[ 'PageviewsPerSession' ][ 'diff' ] != 0 ) ? $boxes_data[ 'PageviewsPerSession' ][ 'color' ] : 'black';
|
888 |
-
$boxes_data[ 'BounceRate' ][ 'color' ] = ( $boxes_data[ 'BounceRate' ][ 'diff' ] != 0 ) ? $boxes_data[ 'BounceRate' ][ 'color' ] : 'black';
|
889 |
-
|
890 |
-
return $boxes_data;
|
891 |
-
}
|
892 |
-
|
893 |
-
/**
|
894 |
-
* Number format for boxes
|
895 |
-
*
|
896 |
-
* @param float $number Number to format
|
897 |
-
* @param int $precision Precision
|
898 |
-
* @param string $dec_point Decimal point
|
899 |
-
* @param string $thousands_sep Thousands Separator
|
900 |
-
*
|
901 |
-
* @return string clean number format
|
902 |
-
*/
|
903 |
-
public static function number_format_clean( $number, $precision = 0, $dec_point = '.', $thousands_sep = ',' ) {
|
904 |
-
if ( $number == 0 ) {
|
905 |
-
return 0;
|
906 |
-
} else {
|
907 |
-
$format = number_format( $number, $precision, $dec_point, $thousands_sep );
|
908 |
-
if ( substr( $format, 2 ) == '.00' ) {
|
909 |
-
return substr( $format, 0, - 3 );
|
910 |
-
}
|
911 |
-
|
912 |
-
return $format;
|
913 |
-
}
|
914 |
-
}
|
915 |
-
|
916 |
-
/**
|
917 |
-
* Get sources from analytics response data
|
918 |
-
*
|
919 |
-
* @param array $data Analytics response data
|
920 |
-
*
|
921 |
-
* @return array|bool sources data
|
922 |
-
*/
|
923 |
-
public static function get_sources( $data ) {
|
924 |
-
if ( !empty( $data ) ) {
|
925 |
-
$data = self::get_reports_from_response( $data );
|
926 |
-
self::handle_more_reports( $data );
|
927 |
-
$report = self::get_single_report( $data );
|
928 |
-
self::get_report_column_header( $report );
|
929 |
-
$report_data = self::get_report_data( $report );
|
930 |
-
$rows = self::get_rows( $report_data );
|
931 |
-
$totals = self::get_totals( $report_data );
|
932 |
-
$totalCount = array();
|
933 |
-
if ( !empty( $totals ) ) {
|
934 |
-
foreach ( $totals as $key => $total ) {
|
935 |
-
$totalCount = $total[ 'values' ][ 0 ];
|
936 |
-
}
|
937 |
-
}
|
938 |
-
$sources = array(
|
939 |
-
'total' => $totalCount,
|
940 |
-
'sum' => 0,
|
941 |
-
'rows' => array(),
|
942 |
-
);
|
943 |
-
if ( !empty( $rows ) ) {
|
944 |
-
$i = 1;
|
945 |
-
foreach ( $rows as $row ) {
|
946 |
-
if ( !empty( $row ) ) {
|
947 |
-
foreach ( $row as $key => $value ) {
|
948 |
-
if ( $key == 'dimensions' ) {
|
949 |
-
$sources[ 'rows' ][ $i ][ 'name' ] = $value[ 0 ];
|
950 |
-
$sources[ 'rows' ][ $i ][ 'url' ] = $value[ 0 ];
|
951 |
-
} elseif ( $key == 'metrics' ) {
|
952 |
-
$sources[ 'rows' ][ $i ][ 'number' ] = $value[ 0 ][ 'values' ][ 0 ];
|
953 |
-
$sources[ 'rows' ][ $i ][ 'percent' ] = (!empty( $totalCount ) ) ? round( $value[ 0 ][ 'values' ][ 0 ] / $totalCount * 100, 2 ) : 0;
|
954 |
-
$sources[ 'sum' ] += $value[ 0 ][ 'values' ][ 0 ];
|
955 |
-
}
|
956 |
-
}
|
957 |
-
$i ++;
|
958 |
-
}
|
959 |
-
}
|
960 |
-
}
|
961 |
-
|
962 |
-
return $sources;
|
963 |
-
}
|
964 |
-
|
965 |
-
return false;
|
966 |
-
}
|
967 |
-
|
968 |
-
/**
|
969 |
-
* Get dashboard boxes data from analytics response data
|
970 |
-
*
|
971 |
-
* @param array $data Analytics response data
|
972 |
-
*
|
973 |
-
* @return array dashboard boxes data
|
974 |
-
*/
|
975 |
-
public static function get_dashboard_boxes_data( $data ) {
|
976 |
-
if ( !empty( $data ) ) {
|
977 |
-
$data = self::get_reports_from_response( $data );
|
978 |
-
self::handle_more_reports( $data );
|
979 |
-
$report = self::get_single_report( $data );
|
980 |
-
self::get_report_column_header( $report );
|
981 |
-
$report_data = self::get_report_data( $report );
|
982 |
-
$totals = self::get_totals( $report_data );
|
983 |
-
$boxes_data = array();
|
984 |
-
$boxes_data[ 'Sessions' ] = array(
|
985 |
-
'label' => 'Visits',
|
986 |
-
'value' => $totals[ 0 ][ 'values' ][ 0 ],
|
987 |
-
);
|
988 |
-
$boxes_data[ 'Pageviews' ] = array(
|
989 |
-
'label' => 'Pageviews',
|
990 |
-
'value' => $totals[ 0 ][ 'values' ][ 1 ],
|
991 |
-
);
|
992 |
-
$boxes_data[ 'pageviewsPerSession' ] = array(
|
993 |
-
'label' => 'Pages / Visit',
|
994 |
-
'value' => self::number_format_clean( $totals[ 0 ][ 'values' ][ 2 ], 2, '.', ',' ),
|
995 |
-
);
|
996 |
-
$boxes_data[ 'BounceRate' ] = array(
|
997 |
-
'label' => 'Bounce Rate',
|
998 |
-
'value' => self::number_format_clean( $totals[ 0 ][ 'values' ][ 3 ], 2, '.', ',' ) . '%',
|
999 |
-
);
|
1000 |
-
$boxes_data[ 'avgTimeOnPage' ] = array(
|
1001 |
-
'label' => 'Avg. Time on Site',
|
1002 |
-
'value' => gmdate( "H:i:s", $totals[ 0 ][ 'values' ][ 4 ] ),
|
1003 |
-
);
|
1004 |
-
$boxes_data[ 'percentNewSessions' ] = array(
|
1005 |
-
'label' => '% of New Visits',
|
1006 |
-
'value' => self::number_format_clean( $totals[ 0 ][ 'values' ][ 5 ], 2, '.', ',' ),
|
1007 |
-
);
|
1008 |
-
|
1009 |
-
return $boxes_data;
|
1010 |
-
}
|
1011 |
-
}
|
1012 |
-
|
1013 |
-
/**
|
1014 |
-
* Get Empty Boxes Structure.
|
1015 |
-
*
|
1016 |
-
* @return array Array of empty boxes structure values.
|
1017 |
-
*/
|
1018 |
-
public static function get_empty_boxes_structure() {
|
1019 |
-
$boxes_data = array();
|
1020 |
-
$boxes_data[ 'Sessions' ] = array(
|
1021 |
-
'label' => 'Visits',
|
1022 |
-
'value' => 0,
|
1023 |
-
);
|
1024 |
-
$boxes_data[ 'Pageviews' ] = array(
|
1025 |
-
'label' => 'Pageviews',
|
1026 |
-
'value' => 0,
|
1027 |
-
);
|
1028 |
-
$boxes_data[ 'pageviewsPerSession' ] = array(
|
1029 |
-
'label' => 'Pages / Visit',
|
1030 |
-
'value' => self::number_format_clean( 0, 2, '.', ',' ),
|
1031 |
-
);
|
1032 |
-
$boxes_data[ 'BounceRate' ] = array(
|
1033 |
-
'label' => 'Bounce Rate',
|
1034 |
-
'value' => self::number_format_clean( 0, 2, '.', ',' ) . '%',
|
1035 |
-
);
|
1036 |
-
$boxes_data[ 'avgTimeOnPage' ] = array(
|
1037 |
-
'label' => 'Avg. Time on Site',
|
1038 |
-
'value' => gmdate( "H:i:s", 0 ),
|
1039 |
-
);
|
1040 |
-
$boxes_data[ 'percentNewSessions' ] = array(
|
1041 |
-
'label' => '% of New Visits',
|
1042 |
-
'value' => self::number_format_clean( 0, 2, '.', ',' ),
|
1043 |
-
);
|
1044 |
-
|
1045 |
-
return $boxes_data;
|
1046 |
-
}
|
1047 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class/Ga_Template.php
DELETED
@@ -1,73 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
/**
|
4 |
-
* Class Ga_Template
|
5 |
-
*/
|
6 |
-
class Ga_Template {
|
7 |
-
/**
|
8 |
-
* @var array Array of template properties.
|
9 |
-
*/
|
10 |
-
protected $props;
|
11 |
-
|
12 |
-
/**
|
13 |
-
* @var string Relative path in view/ folder.
|
14 |
-
*/
|
15 |
-
protected $path;
|
16 |
-
|
17 |
-
/**
|
18 |
-
* Ga_Template constructor.
|
19 |
-
*
|
20 |
-
* @param string $path Relative path in view/ folder.
|
21 |
-
* @param array $props Array of props to be passed to the template.
|
22 |
-
*/
|
23 |
-
public function __construct( $path, $props = [] ) {
|
24 |
-
$this->path = $path;
|
25 |
-
$this->props = $props;
|
26 |
-
}
|
27 |
-
|
28 |
-
/**
|
29 |
-
* Include rendered template inline.
|
30 |
-
*
|
31 |
-
* @param string $path Relative path in view/ folder.
|
32 |
-
* @param array $props Array of props to be passed to the template.
|
33 |
-
*/
|
34 |
-
public static function load( $path, $props = [] ) {
|
35 |
-
( new static( $path, $props ) )->includeTemplate();
|
36 |
-
}
|
37 |
-
|
38 |
-
/**
|
39 |
-
* Get rendered template.
|
40 |
-
*
|
41 |
-
* @param string $path Relative path in view/ folder.
|
42 |
-
* @param array $props Array of props to be passed to the template.
|
43 |
-
*
|
44 |
-
* @return string Rendered template.
|
45 |
-
*/
|
46 |
-
public static function render( $path, $props = [] ) {
|
47 |
-
return ( new static( $path, $props ) )->renderTemplate();
|
48 |
-
}
|
49 |
-
|
50 |
-
/**
|
51 |
-
* Include template.
|
52 |
-
*/
|
53 |
-
public function includeTemplate() {
|
54 |
-
$template_path = GA_PLUGIN_DIR . '/view/' . $this->path . '.php';
|
55 |
-
|
56 |
-
if ( is_readable( $template_path ) ) {
|
57 |
-
load_template( $template_path, false, $this->props );
|
58 |
-
}
|
59 |
-
}
|
60 |
-
|
61 |
-
/**
|
62 |
-
* Get rendered template.
|
63 |
-
*
|
64 |
-
* @return string
|
65 |
-
*/
|
66 |
-
public function renderTemplate() {
|
67 |
-
ob_start();
|
68 |
-
$this->includeTemplate();
|
69 |
-
$render = ob_get_contents();
|
70 |
-
|
71 |
-
return $render ?: '';
|
72 |
-
}
|
73 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class/class-ga-admin.php
ADDED
@@ -0,0 +1,1228 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Google Analytics admin class.
|
4 |
+
*
|
5 |
+
* @package GoogleAnalytics
|
6 |
+
*/
|
7 |
+
|
8 |
+
/**
|
9 |
+
* Admin class.
|
10 |
+
*/
|
11 |
+
class Ga_Admin {
|
12 |
+
|
13 |
+
const GA_WEB_PROPERTY_ID_OPTION_NAME = 'googleanalytics_web_property_id';
|
14 |
+
const GA_EXCLUDE_ROLES_OPTION_NAME = 'googleanalytics_exclude_roles';
|
15 |
+
const GA_SHARETHIS_TERMS_OPTION_NAME = 'googleanalytics_sharethis_terms';
|
16 |
+
const GA_HIDE_TERMS_OPTION_NAME = 'googleanalytics_hide_terms';
|
17 |
+
const GA_VERSION_OPTION_NAME = 'googleanalytics_version';
|
18 |
+
const GA_SELECTED_ACCOUNT = 'googleanalytics_selected_account';
|
19 |
+
const GA_OAUTH_AUTH_CODE_OPTION_NAME = 'googleanalytics_oauth_auth_code';
|
20 |
+
const GA_OAUTH_AUTH_TOKEN_OPTION_NAME = 'googleanalytics_oauth_auth_token';
|
21 |
+
const GA_ACCOUNT_DATA_OPTION_NAME = 'googleanalytics_account_data';
|
22 |
+
const GA_WEB_PROPERTY_ID_MANUALLY_OPTION_NAME = 'googleanalytics_web_property_id_manually';
|
23 |
+
const GA_WEB_PROPERTY_ID_MANUALLY_VALUE_OPTION_NAME = 'googleanalytics_web_property_id_manually_value';
|
24 |
+
const GA_SHARETHIS_PROPERTY_ID = 'googleanalytics_sherethis_property_id';
|
25 |
+
const GA_SHARETHIS_PROPERTY_SECRET = 'googleanalytics_sherethis_property_secret';
|
26 |
+
const GA_SHARETHIS_VERIFICATION_RESULT = 'googleanalytics_sherethis_verification_result';
|
27 |
+
const MIN_WP_VERSION = '3.8';
|
28 |
+
const GA_SHARETHIS_API_ALIAS = 'sharethis';
|
29 |
+
const GA_DISABLE_ALL_FEATURES = 'googleanalytics_disable_all_features';
|
30 |
+
const GA_HEARTBEAT_API_CACHE_UPDATE = false;
|
31 |
+
const NOTICE_SUCCESS = 'success';
|
32 |
+
const NOTICE_WARNING = 'warning';
|
33 |
+
const NOTICE_ERROR = 'error';
|
34 |
+
|
35 |
+
/**
|
36 |
+
* Instantiate API client.
|
37 |
+
*
|
38 |
+
* @param string $type Type string.
|
39 |
+
*
|
40 |
+
* @return Ga_Lib_Google_Api_Client|null
|
41 |
+
*/
|
42 |
+
public static function api_client( $type = '' ) {
|
43 |
+
if ( self::GA_SHARETHIS_API_ALIAS === $type ) {
|
44 |
+
$instance = Ga_Lib_Sharethis_Api_Client::get_instance();
|
45 |
+
} else {
|
46 |
+
$instance = Ga_Lib_Google_Api_Client::get_instance();
|
47 |
+
$token = Ga_Helper::get_option( self::GA_OAUTH_AUTH_TOKEN_OPTION_NAME );
|
48 |
+
try {
|
49 |
+
if ( ! empty( $token ) ) {
|
50 |
+
$token = json_decode( $token, true );
|
51 |
+
$instance->set_access_token( $token );
|
52 |
+
}
|
53 |
+
} catch ( Exception $e ) {
|
54 |
+
Ga_Helper::ga_oauth_notice( $e->getMessage() );
|
55 |
+
}
|
56 |
+
}
|
57 |
+
|
58 |
+
return $instance;
|
59 |
+
}
|
60 |
+
|
61 |
+
/**
|
62 |
+
* Initializes plugin's options during plugin activation process.
|
63 |
+
*/
|
64 |
+
public static function activate_googleanalytics() {
|
65 |
+
add_option( self::GA_WEB_PROPERTY_ID_OPTION_NAME, Ga_Helper::GA_DEFAULT_WEB_ID );
|
66 |
+
add_option( self::GA_EXCLUDE_ROLES_OPTION_NAME, wp_json_encode( array() ) );
|
67 |
+
add_option( self::GA_VERSION_OPTION_NAME );
|
68 |
+
add_option( self::GA_OAUTH_AUTH_CODE_OPTION_NAME );
|
69 |
+
add_option( self::GA_OAUTH_AUTH_TOKEN_OPTION_NAME );
|
70 |
+
add_option( self::GA_ACCOUNT_DATA_OPTION_NAME );
|
71 |
+
add_option( self::GA_SELECTED_ACCOUNT );
|
72 |
+
add_option( self::GA_WEB_PROPERTY_ID_MANUALLY_OPTION_NAME, '0' );
|
73 |
+
add_option( self::GA_WEB_PROPERTY_ID_MANUALLY_VALUE_OPTION_NAME );
|
74 |
+
add_option( self::GA_DISABLE_ALL_FEATURES );
|
75 |
+
Ga_Cache::add_cache_options();
|
76 |
+
}
|
77 |
+
|
78 |
+
/**
|
79 |
+
* Deletes plugin's options during plugin activation process.
|
80 |
+
*/
|
81 |
+
public static function deactivate_googleanalytics() {
|
82 |
+
delete_option( self::GA_WEB_PROPERTY_ID_OPTION_NAME );
|
83 |
+
delete_option( self::GA_EXCLUDE_ROLES_OPTION_NAME );
|
84 |
+
delete_option( self::GA_OAUTH_AUTH_CODE_OPTION_NAME );
|
85 |
+
delete_option( self::GA_OAUTH_AUTH_TOKEN_OPTION_NAME );
|
86 |
+
delete_option( self::GA_ACCOUNT_DATA_OPTION_NAME );
|
87 |
+
delete_option( self::GA_SELECTED_ACCOUNT );
|
88 |
+
delete_option( self::GA_WEB_PROPERTY_ID_MANUALLY_OPTION_NAME );
|
89 |
+
delete_option( self::GA_WEB_PROPERTY_ID_MANUALLY_VALUE_OPTION_NAME );
|
90 |
+
delete_option( self::GA_DISABLE_ALL_FEATURES );
|
91 |
+
delete_option( Ga_SupportLogger::LOG_OPTION );
|
92 |
+
delete_option( 'googleanalytics_version' );
|
93 |
+
delete_option( 'googleanalytics_optimize_code' );
|
94 |
+
delete_option( 'googleanalytics_ip_anonymization' );
|
95 |
+
delete_option( 'googleanalytics-hide-review' );
|
96 |
+
delete_option( 'googleanalytics_enable_debug_mode' );
|
97 |
+
delete_option( 'googleanalytics_gdpr_config' );
|
98 |
+
delete_option( 'googleanalytics_demographic' );
|
99 |
+
delete_option( 'googleanalytics_demo_data' );
|
100 |
+
delete_option( 'googleanalytics_demo_date' );
|
101 |
+
delete_option( 'googleanalytics_send_data' );
|
102 |
+
delete_option( 'googleanalytics_hide_terms' );
|
103 |
+
delete_option( 'googleanalytics_sharethis_terms' );
|
104 |
+
delete_option( 'googleanalytics_sherethis_property_id' );
|
105 |
+
delete_option( 'googleanalytics_sherethis_property_secret' );
|
106 |
+
delete_option( self::GA_SHARETHIS_TERMS_OPTION_NAME );
|
107 |
+
Ga_Cache::delete_cache_options();
|
108 |
+
}
|
109 |
+
|
110 |
+
/**
|
111 |
+
* Deletes plugin's options during plugin uninstallation process.
|
112 |
+
*/
|
113 |
+
public static function uninstall_googleanalytics() {
|
114 |
+
delete_option( self::GA_SHARETHIS_TERMS_OPTION_NAME );
|
115 |
+
delete_option( self::GA_HIDE_TERMS_OPTION_NAME );
|
116 |
+
delete_option( self::GA_VERSION_OPTION_NAME );
|
117 |
+
delete_option( self::GA_SHARETHIS_PROPERTY_ID );
|
118 |
+
delete_option( self::GA_SHARETHIS_PROPERTY_SECRET );
|
119 |
+
delete_option( self::GA_SHARETHIS_VERIFICATION_RESULT );
|
120 |
+
}
|
121 |
+
|
122 |
+
/**
|
123 |
+
* Do actions during plugin load.
|
124 |
+
*/
|
125 |
+
public static function loaded_googleanalytics() {
|
126 |
+
self::update_googleanalytics();
|
127 |
+
}
|
128 |
+
|
129 |
+
/**
|
130 |
+
* Update hook fires when plugin is being loaded.
|
131 |
+
*/
|
132 |
+
public static function update_googleanalytics() {
|
133 |
+
$version = get_option( self::GA_VERSION_OPTION_NAME );
|
134 |
+
$installed_version = get_option( self::GA_VERSION_OPTION_NAME, '2.4.0' );
|
135 |
+
$old_property_value = Ga_Helper::get_option( 'web_property_id' );
|
136 |
+
|
137 |
+
if ( version_compare( $installed_version, GOOGLEANALYTICS_VERSION, 'eq' ) ) {
|
138 |
+
return;
|
139 |
+
}
|
140 |
+
|
141 |
+
if ( version_compare( $installed_version, GOOGLEANALYTICS_VERSION, 'lt' ) ) {
|
142 |
+
|
143 |
+
if ( ! empty( $old_property_value ) ) {
|
144 |
+
Ga_Helper::update_option( self::GA_WEB_PROPERTY_ID_MANUALLY_VALUE_OPTION_NAME, $old_property_value );
|
145 |
+
Ga_Helper::update_option( self::GA_WEB_PROPERTY_ID_MANUALLY_OPTION_NAME, 1 );
|
146 |
+
delete_option( 'web_property_id' );
|
147 |
+
}
|
148 |
+
}
|
149 |
+
|
150 |
+
update_option( self::GA_VERSION_OPTION_NAME, GOOGLEANALYTICS_VERSION );
|
151 |
+
}
|
152 |
+
|
153 |
+
/**
|
154 |
+
* Preupdate excluding rules.
|
155 |
+
*
|
156 |
+
* @param string $new_value New value.
|
157 |
+
* @param string $old_value Old value.
|
158 |
+
*
|
159 |
+
* @return false|string
|
160 |
+
*/
|
161 |
+
public static function preupdate_exclude_roles( $new_value, $old_value ) {
|
162 |
+
if ( false === Ga_Helper::are_features_enabled() ) {
|
163 |
+
return '';
|
164 |
+
}
|
165 |
+
|
166 |
+
return wp_json_encode( $new_value );
|
167 |
+
}
|
168 |
+
|
169 |
+
/**
|
170 |
+
* Pre-update hook for preparing JSON structure.
|
171 |
+
*
|
172 |
+
* @param string $new_value New value.
|
173 |
+
* @param string $old_value Old value.
|
174 |
+
*
|
175 |
+
* @return mixed
|
176 |
+
*/
|
177 |
+
public static function preupdate_selected_account( $new_value, $old_value ) {
|
178 |
+
$data = null;
|
179 |
+
if ( ! empty( $new_value ) ) {
|
180 |
+
$data = explode( '_', $new_value );
|
181 |
+
|
182 |
+
if ( ! empty( $data[1] ) ) {
|
183 |
+
Ga_Helper::update_option( self::GA_WEB_PROPERTY_ID_OPTION_NAME, $data[1] );
|
184 |
+
}
|
185 |
+
}
|
186 |
+
|
187 |
+
return wp_json_encode( $data );
|
188 |
+
}
|
189 |
+
|
190 |
+
/**
|
191 |
+
* Pre-update disable all features.
|
192 |
+
*
|
193 |
+
* @param string $new_value New value.
|
194 |
+
* @param string $old_value Old value.
|
195 |
+
*
|
196 |
+
* @return mixed
|
197 |
+
*/
|
198 |
+
public static function preupdate_disable_all_features( $new_value, $old_value ) {
|
199 |
+
if ( 'on' === $old_value ) {
|
200 |
+
Ga_Helper::update_option( self::GA_WEB_PROPERTY_ID_MANUALLY_OPTION_NAME, false );
|
201 |
+
}
|
202 |
+
|
203 |
+
return $new_value;
|
204 |
+
}
|
205 |
+
|
206 |
+
/**
|
207 |
+
* Pre-update optimize code.
|
208 |
+
*
|
209 |
+
* @param string $new_value New value.
|
210 |
+
* @param string $old_value Old value.
|
211 |
+
*
|
212 |
+
* @return mixed|string
|
213 |
+
*/
|
214 |
+
public static function preupdate_optimize_code( $new_value, $old_value ) {
|
215 |
+
if ( ! empty( $new_value ) ) {
|
216 |
+
$new_value = sanitize_text_field( wp_unslash( $new_value ) );
|
217 |
+
}
|
218 |
+
|
219 |
+
return $new_value;
|
220 |
+
}
|
221 |
+
|
222 |
+
/**
|
223 |
+
* Pre-update IP Anonymization.
|
224 |
+
*
|
225 |
+
* @param string $new_value New value.
|
226 |
+
* @param string $old_value Old value.
|
227 |
+
*
|
228 |
+
* @return mixed
|
229 |
+
*/
|
230 |
+
public static function preupdate_ip_anonymization( $new_value, $old_value ) {
|
231 |
+
return $new_value;
|
232 |
+
}
|
233 |
+
|
234 |
+
/**
|
235 |
+
* Pre-update Enable GA Debugging.
|
236 |
+
*
|
237 |
+
* @param string $new_value New value.
|
238 |
+
* @param string $old_value Old value.
|
239 |
+
*
|
240 |
+
* @return mixed
|
241 |
+
*/
|
242 |
+
public static function preupdate_enable_debug_mode( $new_value, $old_value ) {
|
243 |
+
return $new_value;
|
244 |
+
}
|
245 |
+
|
246 |
+
/**
|
247 |
+
* Registers plugin's settings.
|
248 |
+
*/
|
249 |
+
public static function admin_init_googleanalytics() {
|
250 |
+
register_setting( GA_NAME, self::GA_WEB_PROPERTY_ID_OPTION_NAME );
|
251 |
+
register_setting( GA_NAME, self::GA_EXCLUDE_ROLES_OPTION_NAME );
|
252 |
+
register_setting( GA_NAME, self::GA_SELECTED_ACCOUNT );
|
253 |
+
register_setting( GA_NAME, self::GA_OAUTH_AUTH_CODE_OPTION_NAME );
|
254 |
+
register_setting( GA_NAME, self::GA_WEB_PROPERTY_ID_MANUALLY_OPTION_NAME );
|
255 |
+
register_setting( GA_NAME, self::GA_WEB_PROPERTY_ID_MANUALLY_VALUE_OPTION_NAME );
|
256 |
+
register_setting( GA_NAME, self::GA_DISABLE_ALL_FEATURES );
|
257 |
+
register_setting( GA_NAME, 'googleanalytics_optimize_code' );
|
258 |
+
register_setting( GA_NAME, 'googleanalytics_ip_anonymization' );
|
259 |
+
register_setting( GA_NAME, 'googleanalytics_enable_debug_mode' );
|
260 |
+
add_filter( 'pre_update_option_' . self::GA_EXCLUDE_ROLES_OPTION_NAME, 'Ga_Admin::preupdate_exclude_roles', 1, 2 );
|
261 |
+
add_filter( 'pre_update_option_' . self::GA_SELECTED_ACCOUNT, 'GA_Admin::preupdate_selected_account', 1, 2 );
|
262 |
+
add_filter( 'pre_update_option_googleanalytics_optimize_code', 'Ga_Admin::preupdate_optimize_code', 1, 2 );
|
263 |
+
add_filter( 'pre_update_option_googleanalytics_ip_anonymization', 'Ga_Admin::preupdate_ip_anonymization', 1, 2 );
|
264 |
+
add_filter( 'pre_update_option_googleanalytics_enable_debug_mode', 'Ga_Admin::preupdate_enable_debug_mode', 1, 2 );
|
265 |
+
}
|
266 |
+
|
267 |
+
/**
|
268 |
+
* Builds plugin's menu structure.
|
269 |
+
*/
|
270 |
+
public static function admin_menu_googleanalytics() {
|
271 |
+
$gdpr = get_option( 'googleanalytics_gdpr_config' );
|
272 |
+
|
273 |
+
if ( current_user_can( 'manage_options' ) ) {
|
274 |
+
add_menu_page( 'Google Analytics', 'Google Analytics', 'manage_options', 'googleanalytics', 'Ga_Admin::statistics_page_googleanalytics', 'dashicons-chart-line', 1000 );
|
275 |
+
add_submenu_page( 'googleanalytics', 'Google Analytics', __( 'Dashboard' ), 'manage_options', 'googleanalytics', 'Ga_Admin::statistics_page_googleanalytics' );
|
276 |
+
add_submenu_page( 'googleanalytics', 'Google Analytics', __( 'Settings' ), 'manage_options', 'googleanalytics/settings', 'Ga_Admin::options_page_googleanalytics' );
|
277 |
+
|
278 |
+
if ( ! empty( $gdpr ) ) {
|
279 |
+
add_submenu_page(
|
280 |
+
'googleanalytics',
|
281 |
+
'Google Analytics',
|
282 |
+
__( 'GDPR' ),
|
283 |
+
'manage_options',
|
284 |
+
'googleanalytics/gdpr',
|
285 |
+
'Ga_Admin::gdpr_page_googleanalytics'
|
286 |
+
);
|
287 |
+
}
|
288 |
+
}
|
289 |
+
}
|
290 |
+
|
291 |
+
/**
|
292 |
+
* Prepares and displays plugin's stats page.
|
293 |
+
*/
|
294 |
+
public static function statistics_page_googleanalytics() {
|
295 |
+
|
296 |
+
if ( ! Ga_Helper::is_wp_version_valid() || ! Ga_Helper::is_php_version_valid() ) {
|
297 |
+
return false;
|
298 |
+
}
|
299 |
+
|
300 |
+
$data = self::get_stats_page();
|
301 |
+
Ga_View_Core::load(
|
302 |
+
'statistics',
|
303 |
+
array(
|
304 |
+
'data' => $data,
|
305 |
+
)
|
306 |
+
);
|
307 |
+
|
308 |
+
if ( Ga_Cache::is_data_cache_outdated( '', Ga_Helper::get_account_id() ) ) {
|
309 |
+
self::api_client()->add_own_error( '1', __( 'Saved data is shown, it will be refreshed soon' ), 'Ga_Data_Outdated_Exception' );
|
310 |
+
}
|
311 |
+
|
312 |
+
self::display_api_errors();
|
313 |
+
}
|
314 |
+
|
315 |
+
/**
|
316 |
+
* Prepares and displays plugin's settings page.
|
317 |
+
*/
|
318 |
+
public static function options_page_googleanalytics() {
|
319 |
+
if ( false === Ga_Helper::is_wp_version_valid() || false === Ga_Helper::is_php_version_valid() ) {
|
320 |
+
return false;
|
321 |
+
}
|
322 |
+
|
323 |
+
if ( true === Ga_Helper::are_features_enabled() && true === Ga_Helper::is_curl_disabled() ) {
|
324 |
+
echo wp_kses_post(
|
325 |
+
Ga_Helper::ga_wp_notice(
|
326 |
+
__(
|
327 |
+
'Looks like cURL is not configured on your server. In order to authenticate your Google Analytics account and display statistics, cURL is required. Please contact your server administrator to enable it, or manually enter your Tracking ID.'
|
328 |
+
),
|
329 |
+
'warning'
|
330 |
+
)
|
331 |
+
);
|
332 |
+
}
|
333 |
+
/**
|
334 |
+
* Keeps data to be extracted as variables in the view.
|
335 |
+
*
|
336 |
+
* @var array $data
|
337 |
+
*/
|
338 |
+
$data = array();
|
339 |
+
|
340 |
+
$data[ self::GA_WEB_PROPERTY_ID_OPTION_NAME ] = get_option( self::GA_WEB_PROPERTY_ID_OPTION_NAME );
|
341 |
+
$data[ self::GA_WEB_PROPERTY_ID_MANUALLY_VALUE_OPTION_NAME ] = get_option( self::GA_WEB_PROPERTY_ID_MANUALLY_VALUE_OPTION_NAME, '' );
|
342 |
+
$data[ self::GA_WEB_PROPERTY_ID_MANUALLY_OPTION_NAME ] = get_option( self::GA_WEB_PROPERTY_ID_MANUALLY_OPTION_NAME, '0' );
|
343 |
+
$data[ self::GA_DISABLE_ALL_FEATURES ] = get_option( self::GA_DISABLE_ALL_FEATURES );
|
344 |
+
|
345 |
+
$roles = Ga_Helper::get_user_roles();
|
346 |
+
$saved = json_decode( get_option( self::GA_EXCLUDE_ROLES_OPTION_NAME ), true );
|
347 |
+
|
348 |
+
$tmp = array();
|
349 |
+
if ( false === empty( $roles ) ) {
|
350 |
+
foreach ( $roles as $role ) {
|
351 |
+
$role_id = Ga_Helper::prepare_role_id( $role );
|
352 |
+
$tmp[] = array(
|
353 |
+
'name' => $role,
|
354 |
+
'id' => $role_id,
|
355 |
+
'checked' => ( ! empty( $saved[ $role_id ] ) && 'on' === $saved[ $role_id ] ),
|
356 |
+
);
|
357 |
+
}
|
358 |
+
}
|
359 |
+
$data['roles'] = $tmp;
|
360 |
+
|
361 |
+
if ( Ga_Helper::is_authorized() ) {
|
362 |
+
$data['ga_accounts_selector'] = self::get_accounts_selector();
|
363 |
+
$data['auth_button'] = self::get_auth_button( 'reauth' );
|
364 |
+
} else {
|
365 |
+
$data['popup_url'] = self::get_auth_popup_url();
|
366 |
+
$data['auth_button'] = self::get_auth_button( 'auth' );
|
367 |
+
}
|
368 |
+
|
369 |
+
$data['debug_modal'] = self::get_debug_modal();
|
370 |
+
$data['debug_info'] = Ga_SupportLogger::$debug_info;
|
371 |
+
|
372 |
+
// Sanitize error.
|
373 |
+
$error = filter_input( INPUT_GET, 'err', FILTER_SANITIZE_STRING );
|
374 |
+
|
375 |
+
if ( false === empty( $error ) ) {
|
376 |
+
switch ( $error ) {
|
377 |
+
case 1:
|
378 |
+
$data['error_message'] = Ga_Helper::ga_oauth_notice( 'There was a problem with Google Oauth2 authentication process. Please verify your site has a valid SSL Certificate in place and is using the HTTPS protocol.' );
|
379 |
+
break;
|
380 |
+
case 2:
|
381 |
+
$data['error_message'] = Ga_Helper::ga_wp_notice(
|
382 |
+
'Authentication code is incorrect.',
|
383 |
+
'error',
|
384 |
+
true
|
385 |
+
);
|
386 |
+
break;
|
387 |
+
}
|
388 |
+
}
|
389 |
+
|
390 |
+
Ga_View_Core::load(
|
391 |
+
'page',
|
392 |
+
array(
|
393 |
+
'data' => $data,
|
394 |
+
'tooltip' => Ga_Helper::get_tooltip(),
|
395 |
+
)
|
396 |
+
);
|
397 |
+
|
398 |
+
self::display_api_errors();
|
399 |
+
}
|
400 |
+
|
401 |
+
/**
|
402 |
+
* Prepares and displays plugin's gdpr page.
|
403 |
+
*/
|
404 |
+
public static function gdpr_page_googleanalytics() {
|
405 |
+
|
406 |
+
if ( false === Ga_Helper::is_wp_version_valid() || false === Ga_Helper::is_php_version_valid() ) {
|
407 |
+
return false;
|
408 |
+
}
|
409 |
+
if ( true === Ga_Helper::are_features_enabled() && true === Ga_Helper::is_curl_disabled() ) {
|
410 |
+
echo wp_kses_post( Ga_Helper::ga_wp_notice( __( 'Looks like cURL is not configured on your server. In order to authenticate your Google Analytics account and display statistics, cURL is required. Please contact your server administrator to enable it, or manually enter your Tracking ID.' ), 'warning' ) );
|
411 |
+
}
|
412 |
+
|
413 |
+
$vendor_data = self::get_vendors();
|
414 |
+
$vendors = $vendor_data['vendors'];
|
415 |
+
$purposes = array_column( $vendor_data['purposes'], 'name', 'id' );
|
416 |
+
|
417 |
+
include plugin_dir_path( __FILE__ ) . '../view/templates/gdpr-config.php';
|
418 |
+
}
|
419 |
+
|
420 |
+
/**
|
421 |
+
* Prepares and returns a plugin's URL to be opened in a popup window
|
422 |
+
* during Google authentication process.
|
423 |
+
*
|
424 |
+
* @return mixed
|
425 |
+
*/
|
426 |
+
public static function get_auth_popup_url() {
|
427 |
+
return admin_url( Ga_Helper::create_url( Ga_Helper::GA_SETTINGS_PAGE_URL, array( Ga_Controller_Core::ACTION_PARAM_NAME => 'ga_action_auth' ) ) );
|
428 |
+
}
|
429 |
+
|
430 |
+
/**
|
431 |
+
* Prepares and returns Google Account's dropdown code.
|
432 |
+
*
|
433 |
+
* @return string
|
434 |
+
*/
|
435 |
+
public static function get_accounts_selector() {
|
436 |
+
$selected = Ga_Helper::get_selected_account_data();
|
437 |
+
$selector = json_decode( get_option( self::GA_ACCOUNT_DATA_OPTION_NAME ), true );
|
438 |
+
|
439 |
+
if ( false === Ga_Helper::is_code_manually_enabled() && true === empty( $selector ) ) {
|
440 |
+
echo wp_kses_post( Ga_Helper::ga_wp_notice( "Hi there! It seems like we weren't able to locate a Google Analytics account attached to your email account. Can you please register for Google Analytics and then deactivate and reactivate the plugin?", 'warning' ) );
|
441 |
+
}
|
442 |
+
|
443 |
+
return Ga_View_Core::load(
|
444 |
+
'ga-accounts-selector',
|
445 |
+
array(
|
446 |
+
'selector' => $selector,
|
447 |
+
'selected' => $selected ? implode( '_', $selected ) : null,
|
448 |
+
'add_manually_enabled' => Ga_Helper::is_code_manually_enabled() || Ga_Helper::is_all_feature_disabled(),
|
449 |
+
),
|
450 |
+
true
|
451 |
+
);
|
452 |
+
}
|
453 |
+
|
454 |
+
/**
|
455 |
+
* Adds JS scripts for the settings page.
|
456 |
+
*/
|
457 |
+
public static function enqueue_ga_scripts() {
|
458 |
+
$property_id = get_option( 'googleanalytics_sherethis_property_id', true );
|
459 |
+
$secret = get_option( 'googleanalytics_sherethis_property_secret', true );
|
460 |
+
$config = wp_json_encode( get_option( 'googleanalytics_gdpr_config' ) );
|
461 |
+
|
462 |
+
wp_register_script(
|
463 |
+
GA_NAME . '-page-js',
|
464 |
+
Ga_Helper::get_plugin_url_with_correct_protocol() . '/js/' . GA_NAME . '_page.js',
|
465 |
+
array( 'jquery' ),
|
466 |
+
time(),
|
467 |
+
false
|
468 |
+
);
|
469 |
+
|
470 |
+
wp_enqueue_script( GA_NAME . '-page-js' );
|
471 |
+
wp_localize_script(
|
472 |
+
GA_NAME . '-page-js',
|
473 |
+
'googleAnalyticsPage',
|
474 |
+
array(
|
475 |
+
'ajaxurl' => admin_url( 'admin-ajax.php' ),
|
476 |
+
'nonce' => wp_create_nonce( 'ga_page_nonce' ),
|
477 |
+
'settingsURL' => admin_url( 'admin.php?page=googleanalytics/settings' ),
|
478 |
+
)
|
479 |
+
);
|
480 |
+
|
481 |
+
// @deprecated - Phase this out in favor of wp_localize_script.
|
482 |
+
wp_add_inline_script(
|
483 |
+
GA_NAME . '-page-js',
|
484 |
+
'var siteAdminUrl = \'' .
|
485 |
+
admin_url() .
|
486 |
+
'\'; var gaGdprConfig = \'' .
|
487 |
+
$config .
|
488 |
+
'\'; var ga_demo_nonce = "' .
|
489 |
+
wp_create_nonce( 'ga_demo_nonce' ) .
|
490 |
+
'"; var ga_property_id = "' . $property_id .
|
491 |
+
'"; var ga_secret_id = "' .
|
492 |
+
$secret .
|
493 |
+
'";'
|
494 |
+
);
|
495 |
+
}
|
496 |
+
|
497 |
+
/**
|
498 |
+
* Adds CSS plugin's scripts.
|
499 |
+
*/
|
500 |
+
public static function enqueue_ga_css() {
|
501 |
+
wp_enqueue_style(
|
502 |
+
GA_NAME . '-css',
|
503 |
+
Ga_Helper::get_plugin_url_with_correct_protocol() . '/css/' . GA_NAME . '.css',
|
504 |
+
false,
|
505 |
+
time(),
|
506 |
+
'all'
|
507 |
+
);
|
508 |
+
|
509 |
+
wp_enqueue_style(
|
510 |
+
GA_NAME . '-additional-css',
|
511 |
+
Ga_Helper::get_plugin_url_with_correct_protocol() . '/css/ga_additional.css',
|
512 |
+
false,
|
513 |
+
GOOGLEANALYTICS_VERSION,
|
514 |
+
'all'
|
515 |
+
);
|
516 |
+
|
517 |
+
if ( true === Ga_Helper::is_wp_old() ) {
|
518 |
+
wp_enqueue_style(
|
519 |
+
GA_NAME . '-old-wp-support-css',
|
520 |
+
Ga_Helper::get_plugin_url_with_correct_protocol() . '/css/ga_old_wp_support.css',
|
521 |
+
false,
|
522 |
+
GOOGLEANALYTICS_VERSION,
|
523 |
+
'all'
|
524 |
+
);
|
525 |
+
}
|
526 |
+
|
527 |
+
wp_enqueue_style(
|
528 |
+
GA_NAME . '-modal-css',
|
529 |
+
Ga_Helper::get_plugin_url_with_correct_protocol() . '/css/ga_modal.css',
|
530 |
+
false,
|
531 |
+
GOOGLEANALYTICS_VERSION,
|
532 |
+
'all'
|
533 |
+
);
|
534 |
+
}
|
535 |
+
|
536 |
+
/**
|
537 |
+
* Enqueues dashboard JS scripts.
|
538 |
+
*/
|
539 |
+
private static function enqueue_dashboard_scripts() {
|
540 |
+
wp_enqueue_script(
|
541 |
+
GA_NAME . '-dashboard-js',
|
542 |
+
Ga_Helper::get_plugin_url_with_correct_protocol() . '/js/' . GA_NAME . '_dashboard.js',
|
543 |
+
array( 'jquery' ),
|
544 |
+
GOOGLEANALYTICS_VERSION,
|
545 |
+
false
|
546 |
+
);
|
547 |
+
}
|
548 |
+
|
549 |
+
/**
|
550 |
+
* Enqueues plugin's JS and CSS scripts.
|
551 |
+
*/
|
552 |
+
public static function enqueue_scripts() {
|
553 |
+
$domain = str_replace( 'http://', '', str_replace( 'https://', '', str_replace( '/wp-admin/', '', admin_url() ) ) );
|
554 |
+
$st_prop = get_option( self::GA_SHARETHIS_PROPERTY_ID );
|
555 |
+
$st_secret = get_option( self::GA_SHARETHIS_PROPERTY_SECRET );
|
556 |
+
|
557 |
+
if ( Ga_Helper::is_dashboard_page() || Ga_Helper::is_plugin_page() ) {
|
558 |
+
wp_register_script(
|
559 |
+
GA_NAME . '-js',
|
560 |
+
Ga_Helper::get_plugin_url_with_correct_protocol() . '/js/' . GA_NAME . '.js',
|
561 |
+
array( 'jquery' ),
|
562 |
+
GOOGLEANALYTICS_VERSION,
|
563 |
+
false
|
564 |
+
);
|
565 |
+
wp_enqueue_script( GA_NAME . '-js' );
|
566 |
+
|
567 |
+
wp_register_script( 'googlecharts', 'https://www.gstatic.com/charts/loader.js', null, 1, false );
|
568 |
+
wp_enqueue_script( 'googlecharts' );
|
569 |
+
wp_add_inline_script( GA_NAME . '-js', 'var ga_demo_nonce = "' . wp_create_nonce( 'ga_demo_nonce' ) . '";' );
|
570 |
+
|
571 |
+
if ( empty( $st_prop ) || empty( $st_secret ) ) {
|
572 |
+
wp_register_script( 'googlecreateprop', Ga_Helper::get_plugin_url_with_correct_protocol() . '/js/googleanalytics_createprop.js', array( 'jquery', 'wp-util' ), time(), false );
|
573 |
+
wp_enqueue_script( 'googlecreateprop' );
|
574 |
+
wp_add_inline_script(
|
575 |
+
'googlecreateprop',
|
576 |
+
'
|
577 |
+
var gaNonce = "' . wp_create_nonce( 'googleanalyticsnonce' ) . '";
|
578 |
+
var gasiteURL = "' . $domain . '";
|
579 |
+
var gaAdminEmail = "' . get_option( 'admin_email' ) . '";'
|
580 |
+
);
|
581 |
+
}
|
582 |
+
|
583 |
+
self::enqueue_ga_css();
|
584 |
+
}
|
585 |
+
|
586 |
+
if ( Ga_Helper::is_dashboard_page() ) {
|
587 |
+
self::enqueue_dashboard_scripts();
|
588 |
+
}
|
589 |
+
|
590 |
+
if ( Ga_Helper::is_plugin_page() ) {
|
591 |
+
self::enqueue_ga_scripts();
|
592 |
+
}
|
593 |
+
}
|
594 |
+
|
595 |
+
/**
|
596 |
+
* Prepares plugin's statistics page and return HTML code.
|
597 |
+
*
|
598 |
+
* @return string HTML code
|
599 |
+
*/
|
600 |
+
public static function get_stats_page() {
|
601 |
+
$age_chart = null;
|
602 |
+
$boxes = null;
|
603 |
+
$chart = null;
|
604 |
+
$device_chart = null;
|
605 |
+
$gender_chart = null;
|
606 |
+
$labels = null;
|
607 |
+
$sources = null;
|
608 |
+
|
609 |
+
if ( Ga_Helper::is_authorized() && Ga_Helper::is_account_selected() && ! Ga_Helper::is_all_feature_disabled() ) {
|
610 |
+
list( $chart, $age_chart, $device_chart, $gender_chart, $boxes, $labels, $sources ) = self::generate_stats_data();
|
611 |
+
}
|
612 |
+
|
613 |
+
return Ga_Helper::get_chart_page(
|
614 |
+
'stats',
|
615 |
+
compact(
|
616 |
+
'age_chart',
|
617 |
+
'boxes',
|
618 |
+
'chart',
|
619 |
+
'device_chart',
|
620 |
+
'gender_chart',
|
621 |
+
'labels',
|
622 |
+
'sources'
|
623 |
+
)
|
624 |
+
);
|
625 |
+
}
|
626 |
+
|
627 |
+
/**
|
628 |
+
* Prepare required PHP version warning.
|
629 |
+
*/
|
630 |
+
public static function admin_notice_googleanalytics_php_version() {
|
631 |
+
echo wp_kses_post( Ga_Helper::ga_wp_notice( 'Cannot use Google Analytics plugin. PHP version ' . phpversion() . ' is to low. Required PHP version: ' . Ga_Helper::PHP_VERSION_REQUIRED, 'error' ) );
|
632 |
+
}
|
633 |
+
|
634 |
+
/**
|
635 |
+
* Shows plugin's notice on the admin area.
|
636 |
+
*/
|
637 |
+
public static function admin_notice_googleanalytics() {
|
638 |
+
if ( ( ! get_option( self::GA_SHARETHIS_TERMS_OPTION_NAME ) && Ga_Helper::is_plugin_page() ) ||
|
639 |
+
( ! get_option( self::GA_SHARETHIS_TERMS_OPTION_NAME ) && ! get_option( self::GA_HIDE_TERMS_OPTION_NAME ) ) ) {
|
640 |
+
$current_url = Ga_Helper::get_current_url();
|
641 |
+
$url = ( strstr(
|
642 |
+
$current_url,
|
643 |
+
'?'
|
644 |
+
) ? $current_url . '&' : $current_url . '?' ) . http_build_query( array( Ga_Controller_Core::ACTION_PARAM_NAME => 'ga_action_update_terms' ) );
|
645 |
+
Ga_View_Core::load(
|
646 |
+
'ga-notice',
|
647 |
+
array(
|
648 |
+
'url' => $url,
|
649 |
+
)
|
650 |
+
);
|
651 |
+
}
|
652 |
+
|
653 |
+
$settings_updated = filter_input( INPUT_GET, 'settings-updated', FILTER_SANITIZE_STRING );
|
654 |
+
|
655 |
+
if ( false === empty( $settings_updated ) && Ga_Helper::is_plugin_page() ) {
|
656 |
+
echo wp_kses_post( Ga_Helper::ga_wp_notice( __( 'Settings saved' ), self::NOTICE_SUCCESS ) );
|
657 |
+
}
|
658 |
+
|
659 |
+
if ( true === boolval( Ga_Helper::get_option( self::GA_DISABLE_ALL_FEATURES ) ) ) {
|
660 |
+
echo wp_kses(
|
661 |
+
Ga_Helper::ga_wp_notice(
|
662 |
+
__( 'You have disabled all extra features, click here to enable Dashboards, Viral Alerts and Google API.' ),
|
663 |
+
'warning',
|
664 |
+
false,
|
665 |
+
array(
|
666 |
+
'url' => admin_url(
|
667 |
+
Ga_Helper::create_url(
|
668 |
+
Ga_Helper::GA_SETTINGS_PAGE_URL,
|
669 |
+
array( Ga_Controller_Core::ACTION_PARAM_NAME => 'ga_action_enable_all_features' )
|
670 |
+
)
|
671 |
+
),
|
672 |
+
'label' => __( 'Enable' ),
|
673 |
+
)
|
674 |
+
),
|
675 |
+
array(
|
676 |
+
'button' => array(
|
677 |
+
'class' => array(),
|
678 |
+
'onclick' => array(),
|
679 |
+
),
|
680 |
+
'div' => array(
|
681 |
+
'class' => array(),
|
682 |
+
),
|
683 |
+
'p' => array(),
|
684 |
+
)
|
685 |
+
);
|
686 |
+
}
|
687 |
+
}
|
688 |
+
|
689 |
+
/**
|
690 |
+
* Prepare required WP version warning
|
691 |
+
*/
|
692 |
+
public static function admin_notice_googleanalytics_wp_version() {
|
693 |
+
echo wp_kses(
|
694 |
+
Ga_Helper::ga_wp_notice(
|
695 |
+
'Google Analytics plugin requires at least WordPress version ' . self::MIN_WP_VERSION,
|
696 |
+
'error'
|
697 |
+
),
|
698 |
+
array(
|
699 |
+
'button' => array(
|
700 |
+
'class' => array(),
|
701 |
+
'onclick' => array(),
|
702 |
+
),
|
703 |
+
'div' => array(
|
704 |
+
'class' => array(),
|
705 |
+
),
|
706 |
+
'p' => array(),
|
707 |
+
)
|
708 |
+
);
|
709 |
+
}
|
710 |
+
|
711 |
+
/**
|
712 |
+
* Hides plugin's notice
|
713 |
+
*/
|
714 |
+
public static function admin_notice_hide_googleanalytics() {
|
715 |
+
update_option( self::GA_HIDE_TERMS_OPTION_NAME, true );
|
716 |
+
}
|
717 |
+
|
718 |
+
/**
|
719 |
+
* Adds GA dashboard widget only for administrators.
|
720 |
+
*/
|
721 |
+
public static function add_dashboard_device_widget() {
|
722 |
+
if ( true === Ga_Helper::is_administrator() ) {
|
723 |
+
wp_add_dashboard_widget(
|
724 |
+
'ga-dashboard-widget',
|
725 |
+
__( 'Google Analytics Dashboard' ),
|
726 |
+
'Ga_Helper::add_ga_dashboard_widget'
|
727 |
+
);
|
728 |
+
}
|
729 |
+
}
|
730 |
+
|
731 |
+
/**
|
732 |
+
* Adds plugin's actions
|
733 |
+
*/
|
734 |
+
public static function add_actions() {
|
735 |
+
add_action( 'admin_init', 'Ga_Admin::admin_init_googleanalytics' );
|
736 |
+
add_action( 'admin_menu', 'Ga_Admin::admin_menu_googleanalytics' );
|
737 |
+
add_action( 'admin_enqueue_scripts', 'Ga_Admin::enqueue_scripts' );
|
738 |
+
add_action( 'wp_dashboard_setup', 'Ga_Admin::add_dashboard_device_widget' );
|
739 |
+
add_action( 'wp_ajax_ga_ajax_data_change', 'Ga_Admin::ga_ajax_data_change' );
|
740 |
+
add_action( 'wp_ajax_ga_ajax_hide_review', 'Ga_Admin::ga_ajax_hide_review' );
|
741 |
+
add_action( 'wp_ajax_ga_ajax_enable_gdpr', 'Ga_Admin::ga_ajax_gdpr_enable' );
|
742 |
+
add_action( 'wp_ajax_ga_ajax_enable_demographic', 'Ga_Admin::ga_ajax_enable_demo' );
|
743 |
+
add_action( 'wp_ajax_ga_ajax_sign_out', 'Ga_Admin::ga_ajax_sign_out' );
|
744 |
+
add_action( 'admin_notices', 'Ga_Admin::admin_notice_googleanalytics' );
|
745 |
+
add_action( 'heartbeat_tick', 'Ga_Admin::run_heartbeat_jobs' );
|
746 |
+
add_action( 'wp_ajax_googleanalytics_send_debug_email', 'Ga_SupportLogger::send_email' );
|
747 |
+
add_action( 'wp_ajax_set_ga_credentials', 'Ga_Admin::create_ga_property' );
|
748 |
+
|
749 |
+
if ( ! get_option( self::GA_SHARETHIS_TERMS_OPTION_NAME ) && ! get_option( self::GA_HIDE_TERMS_OPTION_NAME ) ) {
|
750 |
+
add_action( 'wp_ajax_googleanalytics_hide_terms', 'Ga_Admin::admin_notice_hide_googleanalytics' );
|
751 |
+
}
|
752 |
+
}
|
753 |
+
|
754 |
+
/**
|
755 |
+
* Runs jobs
|
756 |
+
*
|
757 |
+
* @param string $response Response string.
|
758 |
+
* @param string $screen_id Screen ID string.
|
759 |
+
*/
|
760 |
+
public static function run_heartbeat_jobs( $response, $screen_id = '' ) {
|
761 |
+
|
762 |
+
if ( self::GA_HEARTBEAT_API_CACHE_UPDATE ) {
|
763 |
+
// Disable cache for ajax request.
|
764 |
+
self::api_client()->set_disable_cache( true );
|
765 |
+
|
766 |
+
// Try to regenerate cache if needed.
|
767 |
+
self::generate_stats_data();
|
768 |
+
}
|
769 |
+
}
|
770 |
+
|
771 |
+
/**
|
772 |
+
* Adds plugin's filters
|
773 |
+
*/
|
774 |
+
public static function add_filters() {
|
775 |
+
add_filter( 'plugin_action_links', 'Ga_Admin::ga_action_links', 10, 5 );
|
776 |
+
}
|
777 |
+
|
778 |
+
/**
|
779 |
+
* Adds new action links on the plugin list.
|
780 |
+
*
|
781 |
+
* @param array $actions Actions array.
|
782 |
+
* @param string $plugin_file Plugin file path string.
|
783 |
+
*
|
784 |
+
* @return mixed
|
785 |
+
*/
|
786 |
+
public static function ga_action_links( $actions, $plugin_file ) {
|
787 |
+
if ( basename( $plugin_file ) === GA_NAME . '.php' ) {
|
788 |
+
array_unshift( $actions, '<a href="' . esc_url( get_admin_url( null, Ga_Helper::GA_SETTINGS_PAGE_URL ) ) . '">' . __( 'Settings' ) . '</a>' );
|
789 |
+
}
|
790 |
+
|
791 |
+
return $actions;
|
792 |
+
}
|
793 |
+
|
794 |
+
/**
|
795 |
+
* Init OAuth.
|
796 |
+
*
|
797 |
+
* @return false|void
|
798 |
+
*/
|
799 |
+
public static function init_oauth() {
|
800 |
+
$code = Ga_Helper::get_option( self::GA_OAUTH_AUTH_CODE_OPTION_NAME );
|
801 |
+
|
802 |
+
if ( false === empty( $code ) ) {
|
803 |
+
Ga_Helper::update_option( self::GA_OAUTH_AUTH_CODE_OPTION_NAME, '' );
|
804 |
+
|
805 |
+
// Get access token.
|
806 |
+
$response = self::api_client()->call( 'ga_auth_get_access_token', $code );
|
807 |
+
|
808 |
+
if ( true === empty( $response ) ) {
|
809 |
+
return false;
|
810 |
+
}
|
811 |
+
|
812 |
+
$param = '';
|
813 |
+
|
814 |
+
if ( false === self::save_access_token( $response ) ) {
|
815 |
+
$param = '&err=1';
|
816 |
+
$errors = self::api_client()->get_errors();
|
817 |
+
if ( ! empty( $errors ) ) {
|
818 |
+
foreach ( $errors as $error ) {
|
819 |
+
if ( 'invalid_grant' === $error['message'] ) {
|
820 |
+
$param = '&err=2';
|
821 |
+
}
|
822 |
+
}
|
823 |
+
}
|
824 |
+
} else {
|
825 |
+
self::api_client()->set_access_token( $response->get_data() );
|
826 |
+
// Get accounts data.
|
827 |
+
$account_summaries = self::api_client()->call( 'ga_api_account_summaries' );
|
828 |
+
self::save_ga_account_summaries( $account_summaries->get_data() );
|
829 |
+
update_option( self::GA_SELECTED_ACCOUNT, '' );
|
830 |
+
}
|
831 |
+
|
832 |
+
wp_safe_redirect( admin_url( Ga_Helper::GA_SETTINGS_PAGE_URL . $param ) );
|
833 |
+
}
|
834 |
+
}
|
835 |
+
|
836 |
+
/**
|
837 |
+
* Save access token.
|
838 |
+
*
|
839 |
+
* @param Ga_Lib_Api_Response $response API response.
|
840 |
+
* @param string $refresh_token Refresh token string.
|
841 |
+
*
|
842 |
+
* @return boolean
|
843 |
+
*/
|
844 |
+
public static function save_access_token( $response, $refresh_token = '' ) {
|
845 |
+
$access_token = $response->get_data();
|
846 |
+
if ( ! empty( $access_token ) ) {
|
847 |
+
$access_token['created'] = time();
|
848 |
+
} else {
|
849 |
+
return false;
|
850 |
+
}
|
851 |
+
|
852 |
+
if ( ! empty( $refresh_token ) ) {
|
853 |
+
$access_token['refresh_token'] = $refresh_token;
|
854 |
+
}
|
855 |
+
|
856 |
+
return update_option( self::GA_OAUTH_AUTH_TOKEN_OPTION_NAME, wp_json_encode( $access_token ) );
|
857 |
+
}
|
858 |
+
|
859 |
+
/**
|
860 |
+
* Saves Google Analytics account data.
|
861 |
+
*
|
862 |
+
* @param array $data Data array.
|
863 |
+
*
|
864 |
+
* @return array
|
865 |
+
*/
|
866 |
+
public static function save_ga_account_summaries( $data ) {
|
867 |
+
$return = array();
|
868 |
+
if ( ! empty( $data['items'] ) ) {
|
869 |
+
foreach ( $data['items'] as $item ) {
|
870 |
+
$tmp = array();
|
871 |
+
$tmp['id'] = $item['id'];
|
872 |
+
$tmp['name'] = $item['name'];
|
873 |
+
if ( is_array( $item['webProperties'] ) ) {
|
874 |
+
foreach ( $item['webProperties'] as $property ) {
|
875 |
+
$profiles = array();
|
876 |
+
if ( is_array( $property['profiles'] ) ) {
|
877 |
+
foreach ( $property['profiles'] as $profile ) {
|
878 |
+
$profiles[] = array(
|
879 |
+
'id' => $profile['id'],
|
880 |
+
'name' => $profile['name'],
|
881 |
+
);
|
882 |
+
}
|
883 |
+
}
|
884 |
+
|
885 |
+
$tmp['webProperties'][] = array(
|
886 |
+
'internalWebPropertyId' => $property['internalWebPropertyId'],
|
887 |
+
'webPropertyId' => $property['id'],
|
888 |
+
'name' => $property['name'],
|
889 |
+
'profiles' => $profiles,
|
890 |
+
);
|
891 |
+
}
|
892 |
+
}
|
893 |
+
|
894 |
+
$return[] = $tmp;
|
895 |
+
}
|
896 |
+
|
897 |
+
update_option( self::GA_ACCOUNT_DATA_OPTION_NAME, wp_json_encode( $return ) );
|
898 |
+
} else {
|
899 |
+
update_option( self::GA_ACCOUNT_DATA_OPTION_NAME, '' );
|
900 |
+
}
|
901 |
+
update_option( self::GA_WEB_PROPERTY_ID_OPTION_NAME, '' );
|
902 |
+
|
903 |
+
return $return;
|
904 |
+
}
|
905 |
+
|
906 |
+
/**
|
907 |
+
* Handle AJAX data for the GA dashboard widget.
|
908 |
+
*/
|
909 |
+
public static function ga_ajax_data_change() {
|
910 |
+
if ( Ga_Admin_Controller::validate_ajax_data_change_post() ) {
|
911 |
+
$date_range = filter_input( INPUT_POST, 'date_range', FILTER_SANITIZE_STRING );
|
912 |
+
$metric = filter_input( INPUT_POST, 'metric', FILTER_SANITIZE_STRING );
|
913 |
+
|
914 |
+
echo wp_kses_post( Ga_Helper::get_ga_dashboard_widget_data_json( $date_range, $metric, false, true ) );
|
915 |
+
} else {
|
916 |
+
echo wp_json_encode( array( 'error' => __( 'Invalid request.' ) ) );
|
917 |
+
}
|
918 |
+
|
919 |
+
wp_die();
|
920 |
+
}
|
921 |
+
|
922 |
+
/**
|
923 |
+
* Displays API error messages.
|
924 |
+
*
|
925 |
+
* @param string $alias Alias string.
|
926 |
+
*/
|
927 |
+
public static function display_api_errors( $alias = '' ) {
|
928 |
+
$errors = self::api_client( $alias )->get_errors();
|
929 |
+
if ( ! empty( $errors ) ) {
|
930 |
+
foreach ( $errors as $error ) {
|
931 |
+
echo wp_kses_post( Ga_Notice::get_message( $error ) );
|
932 |
+
}
|
933 |
+
}
|
934 |
+
}
|
935 |
+
|
936 |
+
/**
|
937 |
+
* Gets dashboard data.
|
938 |
+
*
|
939 |
+
* @return array
|
940 |
+
*/
|
941 |
+
public static function generate_stats_data() {
|
942 |
+
$selected = Ga_Helper::get_selected_account_data( true );
|
943 |
+
$update_data = self::check_data_date();
|
944 |
+
|
945 |
+
$current_period = Ga_Helper::get_date_range_from_request();
|
946 |
+
|
947 |
+
$current_period['start'] = false === empty( $current_period['from'] ) ?
|
948 |
+
$current_period['from'] : gmdate( 'Y-m-d', strtotime( '-1 week' ) );
|
949 |
+
$current_period['end'] = false === empty( $current_period['to'] ) ?
|
950 |
+
$current_period['to'] : gmdate( 'Y-m-d', strtotime( 'now' ) );
|
951 |
+
|
952 |
+
$previous_period = Ga_Helper::get_previous_period_for_dates( $current_period['start'], $current_period['end'] );
|
953 |
+
|
954 |
+
$period_in_days = Ga_Helper::get_period_in_days( $current_period['start'], $current_period['end'] );
|
955 |
+
|
956 |
+
$date_ranges = Ga_Stats::set_date_ranges(
|
957 |
+
$current_period['start'],
|
958 |
+
$current_period['end'],
|
959 |
+
$previous_period['start'],
|
960 |
+
$previous_period['end']
|
961 |
+
);
|
962 |
+
|
963 |
+
$query_params = Ga_Stats::get_query( 'main_chart', $selected['view_id'], $date_ranges );
|
964 |
+
$stats_data = self::api_client()->call(
|
965 |
+
'ga_api_data',
|
966 |
+
array( $query_params )
|
967 |
+
);
|
968 |
+
$gender_params = Ga_Stats::get_query( 'gender', $selected['view_id'], $date_ranges );
|
969 |
+
$gender_data = self::api_client()->call(
|
970 |
+
'ga_api_data',
|
971 |
+
array( $gender_params )
|
972 |
+
);
|
973 |
+
$age_params = Ga_Stats::get_query( 'age', $selected['view_id'], $date_ranges );
|
974 |
+
$age_data = self::api_client()->call(
|
975 |
+
'ga_api_data',
|
976 |
+
array( $age_params )
|
977 |
+
);
|
978 |
+
$device_params = Ga_Stats::get_query( 'device', $selected['view_id'], $date_ranges );
|
979 |
+
$device_data = self::api_client()->call(
|
980 |
+
'ga_api_data',
|
981 |
+
array( $device_params )
|
982 |
+
);
|
983 |
+
|
984 |
+
$boxes_data = self::api_client()->call(
|
985 |
+
'ga_api_data',
|
986 |
+
array( Ga_Stats::get_query( 'boxes', $selected['view_id'] ) )
|
987 |
+
);
|
988 |
+
$sources_data = self::api_client()->call(
|
989 |
+
'ga_api_data',
|
990 |
+
array( Ga_Stats::get_query( 'sources', $selected['view_id'] ) )
|
991 |
+
);
|
992 |
+
|
993 |
+
$chart = ! empty( $stats_data ) ? Ga_Stats::get_chart( $stats_data->get_data(), $period_in_days ) : array();
|
994 |
+
$device_chart = false === empty( $device_data ) ? Ga_Stats::get_device_chart( $device_data->get_data() ) : array();
|
995 |
+
$gender_chart = ! empty( $gender_data ) ? Ga_Stats::get_gender_chart( $gender_data->get_data() ) : array();
|
996 |
+
$age_chart = ! empty( $age_data ) ? Ga_Stats::get_age_chart( $age_data->get_data() ) : array();
|
997 |
+
$boxes = ! empty( $boxes_data ) ? Ga_Stats::get_boxes( $boxes_data->get_data() ) : array();
|
998 |
+
$last_chart_date = ! empty( $chart ) ? $chart['date'] : strtotime( 'now' );
|
999 |
+
|
1000 |
+
unset( $chart['date'] );
|
1001 |
+
$labels = array(
|
1002 |
+
'thisWeek' => gmdate( 'M d, Y', strtotime( '-6 day', $last_chart_date ) ) . ' - ' . gmdate( 'M d, Y', $last_chart_date ),
|
1003 |
+
'thisMonth' => gmdate( 'M d, Y', strtotime( '-29 day', $last_chart_date ) ) . ' - ' . gmdate( 'M d, Y', $last_chart_date ),
|
1004 |
+
);
|
1005 |
+
$sources = ! empty( $sources_data ) ? Ga_Stats::get_sources( $sources_data->get_data() ) : array();
|
1006 |
+
|
1007 |
+
// Add gender/age data for default period (1 week ago vs 2 weeks ago).
|
1008 |
+
if ( $update_data ) {
|
1009 |
+
$gender_params = Ga_Stats::get_query( 'gender', $selected['view_id'] );
|
1010 |
+
$gender_data = self::api_client()->call(
|
1011 |
+
'ga_api_data',
|
1012 |
+
array( $gender_params )
|
1013 |
+
);
|
1014 |
+
$age_params = Ga_Stats::get_query( 'age', $selected['view_id'] );
|
1015 |
+
$age_data = self::api_client()->call(
|
1016 |
+
'ga_api_data',
|
1017 |
+
array( $age_params )
|
1018 |
+
);
|
1019 |
+
|
1020 |
+
$gender_chart = ! empty( $gender_data ) ? Ga_Stats::get_gender_chart( $gender_data->get_data() ) : array();
|
1021 |
+
$age_chart = ! empty( $age_data ) ? Ga_Stats::get_age_chart( $age_data->get_data() ) : array();
|
1022 |
+
|
1023 |
+
self::update_demo_data(
|
1024 |
+
$gender_chart,
|
1025 |
+
$age_chart
|
1026 |
+
);
|
1027 |
+
}
|
1028 |
+
|
1029 |
+
return array( $chart, $age_chart, $device_chart, $gender_chart, $boxes, $labels, $sources );
|
1030 |
+
}
|
1031 |
+
|
1032 |
+
/**
|
1033 |
+
* Update demo data.
|
1034 |
+
*
|
1035 |
+
* @param array|bool $gender_response Gender response array.
|
1036 |
+
* @param array|bool $age_response Age response array.
|
1037 |
+
*
|
1038 |
+
* @return void
|
1039 |
+
*/
|
1040 |
+
private static function update_demo_data( $gender_response = false, $age_response = false ) {
|
1041 |
+
$x = 0;
|
1042 |
+
|
1043 |
+
$demo_send_data = array();
|
1044 |
+
if ( $gender_response && $age_response ) {
|
1045 |
+
foreach ( $age_response as $type => $amount ) {
|
1046 |
+
$demo_send_data['age'][ $type ] = intval( $amount );
|
1047 |
+
$x ++;
|
1048 |
+
}
|
1049 |
+
foreach ( $gender_response as $type => $amount ) {
|
1050 |
+
$demo_send_data['gender'][ ucfirst( $type ) ] = intval( $amount );
|
1051 |
+
$x ++;
|
1052 |
+
}
|
1053 |
+
}
|
1054 |
+
|
1055 |
+
// Add data for send.
|
1056 |
+
update_option( 'googleanalytics_demo_data', wp_json_encode( $demo_send_data ) );
|
1057 |
+
|
1058 |
+
// Trigger send.
|
1059 |
+
update_option( 'googleanalytics_send_data', 'true' );
|
1060 |
+
}
|
1061 |
+
|
1062 |
+
/**
|
1063 |
+
* Check if we should send batch of demo data.
|
1064 |
+
*
|
1065 |
+
* @return bool
|
1066 |
+
*/
|
1067 |
+
private static function check_data_date() {
|
1068 |
+
$demo_enabled = get_option( 'googleanalytics_demographic' );
|
1069 |
+
$demo_date = get_option( 'googleanalytics_demo_date' );
|
1070 |
+
$demo_date = ! empty( $demo_date ) ? strtotime( $demo_date ) : '';
|
1071 |
+
$current_date = gmdate( 'Y-m-d' );
|
1072 |
+
$thirty_date = '' !== $demo_date ? gmdate( 'Y-m-d', strtotime( '+1 month', $demo_date ) ) : '';
|
1073 |
+
|
1074 |
+
if ( empty( $demo_enabled ) || ! $demo_enabled ) {
|
1075 |
+
return false;
|
1076 |
+
}
|
1077 |
+
|
1078 |
+
if ( '' !== $demo_date && $thirty_date <= $current_date ) {
|
1079 |
+
return true;
|
1080 |
+
} elseif ( '' === $demo_date ) {
|
1081 |
+
return true;
|
1082 |
+
}
|
1083 |
+
|
1084 |
+
return false;
|
1085 |
+
}
|
1086 |
+
|
1087 |
+
/**
|
1088 |
+
* Returns auth or re-auth button
|
1089 |
+
*
|
1090 |
+
* @param string $button_type Button type.
|
1091 |
+
*
|
1092 |
+
* @return string
|
1093 |
+
*/
|
1094 |
+
public static function get_auth_button( $button_type ) {
|
1095 |
+
return Ga_View_Core::load(
|
1096 |
+
'ga-auth-button',
|
1097 |
+
array(
|
1098 |
+
'label' => 'auth' === $button_type ? 'Authenticate with Google' : 'Re-authenticate with Google',
|
1099 |
+
'button_type' => $button_type,
|
1100 |
+
'url' => self::get_auth_popup_url(),
|
1101 |
+
'manually_id' => get_option( self::GA_WEB_PROPERTY_ID_MANUALLY_OPTION_NAME ),
|
1102 |
+
),
|
1103 |
+
true
|
1104 |
+
);
|
1105 |
+
}
|
1106 |
+
|
1107 |
+
/**
|
1108 |
+
* Returns debug modal
|
1109 |
+
*
|
1110 |
+
* @return string
|
1111 |
+
*/
|
1112 |
+
public static function get_debug_modal() {
|
1113 |
+
return Ga_View_Core::load(
|
1114 |
+
'ga-debug-modal',
|
1115 |
+
array(
|
1116 |
+
'debug_info' => Ga_SupportLogger::$debug_info,
|
1117 |
+
'debug_help_message' => Ga_SupportLogger::$debug_help_message,
|
1118 |
+
),
|
1119 |
+
true
|
1120 |
+
);
|
1121 |
+
}
|
1122 |
+
|
1123 |
+
/**
|
1124 |
+
* Ajax hide review.
|
1125 |
+
*
|
1126 |
+
* @param \WP_Post $post Post object.
|
1127 |
+
*
|
1128 |
+
* @return void
|
1129 |
+
*/
|
1130 |
+
public static function ga_ajax_hide_review( $post ) {
|
1131 |
+
if ( true === Ga_Controller_Core::verify_nonce( 'ga_ajax_data_change' ) ) {
|
1132 |
+
update_option( 'googleanalytics-hide-review', true );
|
1133 |
+
}
|
1134 |
+
|
1135 |
+
wp_send_json_success( 'hidden' );
|
1136 |
+
}
|
1137 |
+
|
1138 |
+
/**
|
1139 |
+
* GA: Ajax callback for GDPR Enable.
|
1140 |
+
*
|
1141 |
+
* @param object $post Post object.
|
1142 |
+
*
|
1143 |
+
* @return void
|
1144 |
+
*/
|
1145 |
+
public static function ga_ajax_gdpr_enable( $post ) {
|
1146 |
+
$post = filter_input_array( INPUT_POST, FILTER_SANITIZE_STRING );
|
1147 |
+
|
1148 |
+
array_walk_recursive(
|
1149 |
+
$post['config'],
|
1150 |
+
function ( &$value ) {
|
1151 |
+
$value = filter_var( trim( $value ), FILTER_SANITIZE_STRING );
|
1152 |
+
}
|
1153 |
+
);
|
1154 |
+
|
1155 |
+
if ( true === empty( $post['config'] ) ) {
|
1156 |
+
wp_send_json_error( 'No config found.' );
|
1157 |
+
}
|
1158 |
+
|
1159 |
+
update_option( 'googleanalytics_gdpr_config', $post['config'] );
|
1160 |
+
|
1161 |
+
wp_send_json_success( 'gdpr_on' );
|
1162 |
+
}
|
1163 |
+
|
1164 |
+
/**
|
1165 |
+
* GA: Ajax callback for Demo Enable.
|
1166 |
+
*
|
1167 |
+
* @param object $post Post object.
|
1168 |
+
*
|
1169 |
+
* @return void
|
1170 |
+
*/
|
1171 |
+
public static function ga_ajax_enable_demo( $post ) {
|
1172 |
+
check_ajax_referer( 'ga_demo_nonce', 'nonce' );
|
1173 |
+
|
1174 |
+
$enabled = 'true' === filter_input( INPUT_POST, 'enabled', FILTER_SANITIZE_STRING );
|
1175 |
+
|
1176 |
+
update_option( 'googleanalytics_demographic', $enabled );
|
1177 |
+
|
1178 |
+
wp_send_json_success( 'demo_on' );
|
1179 |
+
}
|
1180 |
+
|
1181 |
+
/**
|
1182 |
+
* GA: Ajax callback for Demo Enable.
|
1183 |
+
*
|
1184 |
+
* @param object $post Post object.
|
1185 |
+
*
|
1186 |
+
* @return void
|
1187 |
+
*/
|
1188 |
+
public static function ga_ajax_sign_out( $post ) {
|
1189 |
+
check_ajax_referer( 'ga_page_nonce', 'nonce' );
|
1190 |
+
|
1191 |
+
update_option( self::GA_OAUTH_AUTH_CODE_OPTION_NAME, '' );
|
1192 |
+
update_option( self::GA_OAUTH_AUTH_TOKEN_OPTION_NAME, '' );
|
1193 |
+
|
1194 |
+
wp_send_json_success();
|
1195 |
+
}
|
1196 |
+
|
1197 |
+
/**
|
1198 |
+
* New property creation method.
|
1199 |
+
*/
|
1200 |
+
public static function create_ga_property() {
|
1201 |
+
check_ajax_referer( 'googleanalyticsnonce', 'nonce' );
|
1202 |
+
|
1203 |
+
$property_id = filter_input( INPUT_POST, 'propid', FILTER_SANITIZE_STRING );
|
1204 |
+
|
1205 |
+
$secret = filter_input( INPUT_POST, 'secret', FILTER_SANITIZE_STRING );
|
1206 |
+
|
1207 |
+
if ( true === empty( $property_id ) || true === empty( $secret ) ) {
|
1208 |
+
wp_send_json_error( 'Set credentials failed.' );
|
1209 |
+
}
|
1210 |
+
|
1211 |
+
$secret = sanitize_text_field( wp_unslash( $secret ) );
|
1212 |
+
$property_id = sanitize_text_field( wp_unslash( $property_id ) );
|
1213 |
+
|
1214 |
+
update_option( self::GA_SHARETHIS_PROPERTY_ID, $property_id );
|
1215 |
+
update_option( self::GA_SHARETHIS_PROPERTY_SECRET, $secret );
|
1216 |
+
}
|
1217 |
+
|
1218 |
+
/**
|
1219 |
+
* Helper function to get vendors.
|
1220 |
+
*
|
1221 |
+
* @return array Array of vendors.
|
1222 |
+
*/
|
1223 |
+
private static function get_vendors() {
|
1224 |
+
$response = wp_remote_get( 'https://vendor-list.consensu.org/v2/vendor-list.json' );
|
1225 |
+
|
1226 |
+
return json_decode( wp_remote_retrieve_body( $response ), true );
|
1227 |
+
}
|
1228 |
+
}
|
class/{Ga_Autoloader.php → class-ga-autoloader.php}
RENAMED
@@ -1,7 +1,14 @@
|
|
1 |
<?php
|
2 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
3 |
class Ga_Autoloader {
|
4 |
-
|
5 |
/**
|
6 |
* Registers clas loader.
|
7 |
*/
|
@@ -12,45 +19,45 @@ class Ga_Autoloader {
|
|
12 |
/**
|
13 |
* Class loader.
|
14 |
*
|
15 |
-
* @param $class_name
|
16 |
*/
|
17 |
private static function loader( $class_name ) {
|
|
|
18 |
|
19 |
-
// Core classes
|
20 |
if ( preg_match( '/_Core/', $class_name ) ) {
|
21 |
-
$file_name = GA_PLUGIN_DIR . '/class/core/' . $
|
22 |
if ( file_exists( $file_name ) ) {
|
23 |
require $file_name;
|
24 |
}
|
25 |
}
|
26 |
|
27 |
-
// Controllers
|
28 |
if ( preg_match( '/_Controller/', $class_name ) ) {
|
29 |
-
$file_name = GA_PLUGIN_DIR . '/class/controller/' . $
|
30 |
if ( file_exists( $file_name ) ) {
|
31 |
require $file_name;
|
32 |
}
|
33 |
}
|
34 |
|
35 |
-
//
|
36 |
-
$file_name = GA_PLUGIN_DIR . '/class/' . $
|
37 |
if ( file_exists( $file_name ) ) {
|
38 |
require $file_name;
|
39 |
}
|
40 |
|
41 |
-
//
|
42 |
-
$file_name_tools = GA_PLUGIN_DIR . '/tools/' . $
|
43 |
if ( file_exists( $file_name_tools ) ) {
|
44 |
require $file_name_tools;
|
45 |
}
|
46 |
|
47 |
-
// Libs
|
48 |
if ( preg_match( '/Ga_Lib/', $class_name ) ) {
|
49 |
-
$file_name = GA_PLUGIN_DIR . '/lib/' . $
|
50 |
if ( file_exists( $file_name ) ) {
|
51 |
require $file_name;
|
52 |
}
|
53 |
}
|
54 |
}
|
55 |
-
|
56 |
}
|
1 |
<?php
|
2 |
+
/**
|
3 |
+
* GoogleAnalytics Autoloader.
|
4 |
+
*
|
5 |
+
* @package GoogleAnalytics
|
6 |
+
*/
|
7 |
+
|
8 |
+
/**
|
9 |
+
* Autoloader class.
|
10 |
+
*/
|
11 |
class Ga_Autoloader {
|
|
|
12 |
/**
|
13 |
* Registers clas loader.
|
14 |
*/
|
19 |
/**
|
20 |
* Class loader.
|
21 |
*
|
22 |
+
* @param string $class_name Class name string.
|
23 |
*/
|
24 |
private static function loader( $class_name ) {
|
25 |
+
$class_slug = 'class-' . str_replace( '_', '-', sanitize_title( $class_name ) );
|
26 |
|
27 |
+
// Core classes.
|
28 |
if ( preg_match( '/_Core/', $class_name ) ) {
|
29 |
+
$file_name = GA_PLUGIN_DIR . '/class/core/' . $class_slug . '.php';
|
30 |
if ( file_exists( $file_name ) ) {
|
31 |
require $file_name;
|
32 |
}
|
33 |
}
|
34 |
|
35 |
+
// Controllers.
|
36 |
if ( preg_match( '/_Controller/', $class_name ) ) {
|
37 |
+
$file_name = GA_PLUGIN_DIR . '/class/controller/' . $class_slug . '.php';
|
38 |
if ( file_exists( $file_name ) ) {
|
39 |
require $file_name;
|
40 |
}
|
41 |
}
|
42 |
|
43 |
+
// Classes.
|
44 |
+
$file_name = GA_PLUGIN_DIR . '/class/' . $class_slug . '.php';
|
45 |
if ( file_exists( $file_name ) ) {
|
46 |
require $file_name;
|
47 |
}
|
48 |
|
49 |
+
// Tools.
|
50 |
+
$file_name_tools = GA_PLUGIN_DIR . '/tools/' . $class_slug . '.php';
|
51 |
if ( file_exists( $file_name_tools ) ) {
|
52 |
require $file_name_tools;
|
53 |
}
|
54 |
|
55 |
+
// Libs.
|
56 |
if ( preg_match( '/Ga_Lib/', $class_name ) ) {
|
57 |
+
$file_name = GA_PLUGIN_DIR . '/lib/' . $class_slug . '.php';
|
58 |
if ( file_exists( $file_name ) ) {
|
59 |
require $file_name;
|
60 |
}
|
61 |
}
|
62 |
}
|
|
|
63 |
}
|
class/{Ga_Frontend.php → class-ga-frontend.php}
RENAMED
@@ -1,15 +1,29 @@
|
|
1 |
<?php
|
|
|
|
|
|
|
|
|
|
|
2 |
|
|
|
|
|
|
|
3 |
class Ga_Frontend {
|
4 |
|
5 |
const GA_SHARETHIS_PLATFORM_URL = '//platform-api.sharethis.com/js/sharethis.js';
|
6 |
|
|
|
|
|
|
|
|
|
|
|
7 |
public static function platform_sharethis() {
|
8 |
$url = self::GA_SHARETHIS_PLATFORM_URL . '#product=ga';
|
9 |
if ( get_option( Ga_Admin::GA_SHARETHIS_PROPERTY_ID ) ) {
|
10 |
$url = $url . '&property=' . get_option( Ga_Admin::GA_SHARETHIS_PROPERTY_ID );
|
11 |
}
|
12 |
-
|
|
|
13 |
wp_enqueue_script( GA_NAME . '-platform-sharethis' );
|
14 |
}
|
15 |
|
@@ -23,11 +37,17 @@ class Ga_Frontend {
|
|
23 |
add_action( 'wp_head', 'Ga_Frontend::insert_ga_script' );
|
24 |
}
|
25 |
|
|
|
|
|
|
|
|
|
|
|
26 |
public static function insert_ga_script() {
|
27 |
-
if ( Ga_Helper::can_add_ga_code() || Ga_Helper::is_all_feature_disabled() ) {
|
28 |
-
$web_property_id =
|
29 |
$optimize = get_option( 'googleanalytics_optimize_code' );
|
30 |
$anonymization = get_option( 'googleanalytics_ip_anonymization' );
|
|
|
31 |
|
32 |
if ( Ga_Helper::should_load_ga_javascript( $web_property_id ) ) {
|
33 |
$data = array(
|
@@ -36,7 +56,7 @@ class Ga_Frontend {
|
|
36 |
'anonymization' => $anonymization,
|
37 |
);
|
38 |
|
39 |
-
include plugin_dir_path( __FILE__ ) . '../view/
|
40 |
}
|
41 |
}
|
42 |
}
|
@@ -48,11 +68,10 @@ class Ga_Frontend {
|
|
48 |
*/
|
49 |
public static function get_web_property_id() {
|
50 |
$web_property_id = get_option( Ga_Admin::GA_WEB_PROPERTY_ID_OPTION_NAME );
|
51 |
-
if ( Ga_Helper::is_code_manually_enabled() || Ga_Helper::is_all_feature_disabled() ) {
|
52 |
$web_property_id = get_option( Ga_Admin::GA_WEB_PROPERTY_ID_MANUALLY_VALUE_OPTION_NAME );
|
53 |
}
|
54 |
|
55 |
return $web_property_id;
|
56 |
}
|
57 |
-
|
58 |
}
|
1 |
<?php
|
2 |
+
/**
|
3 |
+
* GoogleAnalytics Frontend.
|
4 |
+
*
|
5 |
+
* @package GoogleAnalytics
|
6 |
+
*/
|
7 |
|
8 |
+
/**
|
9 |
+
* Frontend.
|
10 |
+
*/
|
11 |
class Ga_Frontend {
|
12 |
|
13 |
const GA_SHARETHIS_PLATFORM_URL = '//platform-api.sharethis.com/js/sharethis.js';
|
14 |
|
15 |
+
/**
|
16 |
+
* Platform ShareThis.
|
17 |
+
*
|
18 |
+
* @return void
|
19 |
+
*/
|
20 |
public static function platform_sharethis() {
|
21 |
$url = self::GA_SHARETHIS_PLATFORM_URL . '#product=ga';
|
22 |
if ( get_option( Ga_Admin::GA_SHARETHIS_PROPERTY_ID ) ) {
|
23 |
$url = $url . '&property=' . get_option( Ga_Admin::GA_SHARETHIS_PROPERTY_ID );
|
24 |
}
|
25 |
+
|
26 |
+
wp_register_script( GA_NAME . '-platform-sharethis', $url, null, null, false ); // phpcs:ignore
|
27 |
wp_enqueue_script( GA_NAME . '-platform-sharethis' );
|
28 |
}
|
29 |
|
37 |
add_action( 'wp_head', 'Ga_Frontend::insert_ga_script' );
|
38 |
}
|
39 |
|
40 |
+
/**
|
41 |
+
* Insert GoogleAnalytics script.
|
42 |
+
*
|
43 |
+
* @return void
|
44 |
+
*/
|
45 |
public static function insert_ga_script() {
|
46 |
+
if ( true === Ga_Helper::can_add_ga_code() || true === Ga_Helper::is_all_feature_disabled() ) {
|
47 |
+
$web_property_id = self::get_web_property_id();
|
48 |
$optimize = get_option( 'googleanalytics_optimize_code' );
|
49 |
$anonymization = get_option( 'googleanalytics_ip_anonymization' );
|
50 |
+
$debug_mode_on = 'on' === get_option( 'googleanalytics_enable_debug_mode', 'off' );
|
51 |
|
52 |
if ( Ga_Helper::should_load_ga_javascript( $web_property_id ) ) {
|
53 |
$data = array(
|
56 |
'anonymization' => $anonymization,
|
57 |
);
|
58 |
|
59 |
+
include plugin_dir_path( __FILE__ ) . '../view/ga-code.php';
|
60 |
}
|
61 |
}
|
62 |
}
|
68 |
*/
|
69 |
public static function get_web_property_id() {
|
70 |
$web_property_id = get_option( Ga_Admin::GA_WEB_PROPERTY_ID_OPTION_NAME );
|
71 |
+
if ( true === Ga_Helper::is_code_manually_enabled() || true === Ga_Helper::is_all_feature_disabled() ) {
|
72 |
$web_property_id = get_option( Ga_Admin::GA_WEB_PROPERTY_ID_MANUALLY_VALUE_OPTION_NAME );
|
73 |
}
|
74 |
|
75 |
return $web_property_id;
|
76 |
}
|
|
|
77 |
}
|
class/class-ga-helper.php
ADDED
@@ -0,0 +1,888 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* GoogleAnalytics Helper.
|
4 |
+
*
|
5 |
+
* @package GoogleAnalytics
|
6 |
+
*/
|
7 |
+
|
8 |
+
/**
|
9 |
+
* Helper class.
|
10 |
+
*/
|
11 |
+
class Ga_Helper {
|
12 |
+
|
13 |
+
const ROLE_ID_PREFIX = 'role-id-';
|
14 |
+
const GA_DEFAULT_WEB_ID = 'UA-0000000-0';
|
15 |
+
const GA_STATISTICS_PAGE_URL = 'admin.php?page=googleanalytics';
|
16 |
+
const GA_SETTINGS_PAGE_URL = 'admin.php?page=googleanalytics/settings';
|
17 |
+
const DASHBOARD_PAGE_NAME = 'dashboard';
|
18 |
+
const PHP_VERSION_REQUIRED = '5.2.17';
|
19 |
+
const GA_WP_MODERN_VERSION = '4.1';
|
20 |
+
const GA_TOOLTIP_TERMS_NOT_ACCEPTED = 'Please accept the terms to use this feature.';
|
21 |
+
const GA_TOOLTIP_FEATURES_DISABLED = 'Click the Enable button at the top to start using this feature.';
|
22 |
+
const GA_DEBUG_MODE = false;
|
23 |
+
|
24 |
+
/**
|
25 |
+
* Init plugin actions.
|
26 |
+
*/
|
27 |
+
public static function init() {
|
28 |
+
|
29 |
+
// Displays errors related to required PHP version.
|
30 |
+
if ( false === self::is_php_version_valid() ) {
|
31 |
+
add_action( 'admin_notices', 'Ga_Admin::admin_notice_googleanalytics_php_version' );
|
32 |
+
|
33 |
+
return false;
|
34 |
+
}
|
35 |
+
|
36 |
+
// Displays errors related to required WP version.
|
37 |
+
if ( false === self::is_wp_version_valid() ) {
|
38 |
+
add_action( 'admin_notices', 'Ga_Admin::admin_notice_googleanalytics_wp_version' );
|
39 |
+
|
40 |
+
return false;
|
41 |
+
}
|
42 |
+
|
43 |
+
if ( ! is_admin() ) {
|
44 |
+
Ga_Frontend::add_actions();
|
45 |
+
}
|
46 |
+
|
47 |
+
if ( is_admin() ) {
|
48 |
+
Ga_Admin::add_filters();
|
49 |
+
Ga_Admin::add_actions();
|
50 |
+
Ga_Admin::init_oauth();
|
51 |
+
|
52 |
+
$admin_controller = new Ga_Admin_Controller();
|
53 |
+
$admin_controller->handle_actions();
|
54 |
+
}
|
55 |
+
}
|
56 |
+
|
57 |
+
/**
|
58 |
+
* Checks if current page is a WordPress dashboard.
|
59 |
+
*
|
60 |
+
* @return integer
|
61 |
+
*/
|
62 |
+
public static function is_plugin_page() {
|
63 |
+
$site = get_current_screen();
|
64 |
+
|
65 |
+
$request_uri = filter_input( INPUT_SERVER, 'REQUEST_URI', FILTER_SANITIZE_URL );
|
66 |
+
|
67 |
+
return preg_match( '/' . GA_NAME . '/i', $site->base )
|
68 |
+
|| preg_match( '/' . GA_NAME . '/i', $request_uri );
|
69 |
+
}
|
70 |
+
|
71 |
+
/**
|
72 |
+
* Checks if current page is a WordPress dashboard.
|
73 |
+
*
|
74 |
+
* @return number
|
75 |
+
*/
|
76 |
+
public static function is_dashboard_page() {
|
77 |
+
$site = get_current_screen();
|
78 |
+
|
79 |
+
return preg_match( '/' . self::DASHBOARD_PAGE_NAME . '/', $site->base );
|
80 |
+
}
|
81 |
+
|
82 |
+
/**
|
83 |
+
* Check whether the plugin is configured.
|
84 |
+
*
|
85 |
+
* @param string $web_id Web ID string.
|
86 |
+
*
|
87 |
+
* @return boolean
|
88 |
+
*/
|
89 |
+
public static function is_configured( $web_id ) {
|
90 |
+
return self::GA_DEFAULT_WEB_ID !== $web_id && false === empty( $web_id );
|
91 |
+
}
|
92 |
+
|
93 |
+
/**
|
94 |
+
* Prepare an array of current site's user roles
|
95 |
+
*
|
96 |
+
* @return array
|
97 |
+
*/
|
98 |
+
public static function get_user_roles() {
|
99 |
+
global $wp_roles;
|
100 |
+
if ( false === isset( $wp_roles ) ) {
|
101 |
+
$wp_roles = new WP_Roles(); // phpcs:ignore
|
102 |
+
}
|
103 |
+
|
104 |
+
return $wp_roles->get_names();
|
105 |
+
}
|
106 |
+
|
107 |
+
/**
|
108 |
+
* Prepare a role ID.
|
109 |
+
*
|
110 |
+
* The role ID is derived from the role's name and will be used
|
111 |
+
* in its setting name in the additional settings.
|
112 |
+
*
|
113 |
+
* @param string $role_name Role name.
|
114 |
+
*
|
115 |
+
* @return string
|
116 |
+
*/
|
117 |
+
public static function prepare_role_id( $role_name ) {
|
118 |
+
return self::ROLE_ID_PREFIX . strtolower( preg_replace( '/[\W]/', '-', before_last_bar( $role_name ) ) );
|
119 |
+
}
|
120 |
+
|
121 |
+
/**
|
122 |
+
* Prepares role id.
|
123 |
+
*
|
124 |
+
* @param string $v Value string.
|
125 |
+
* @param string $k Key string.
|
126 |
+
*/
|
127 |
+
public static function prepare_role( &$v, $k ) {
|
128 |
+
$v = self::prepare_role_id( $v );
|
129 |
+
}
|
130 |
+
|
131 |
+
/**
|
132 |
+
* Checks whether user role is excluded from adding UA code.
|
133 |
+
*
|
134 |
+
* @return boolean
|
135 |
+
*/
|
136 |
+
public static function can_add_ga_code() {
|
137 |
+
$current_user = wp_get_current_user();
|
138 |
+
$user_roles = ! empty( $current_user->roles ) ? $current_user->roles : array();
|
139 |
+
$exclude_roles = json_decode( get_option( Ga_Admin::GA_EXCLUDE_ROLES_OPTION_NAME ), true );
|
140 |
+
|
141 |
+
array_walk( $user_roles, 'Ga_Helper::prepare_role' );
|
142 |
+
|
143 |
+
$return = true;
|
144 |
+
foreach ( $user_roles as $role ) {
|
145 |
+
if ( ! empty( $exclude_roles[ $role ] ) ) {
|
146 |
+
$return = false;
|
147 |
+
break;
|
148 |
+
}
|
149 |
+
}
|
150 |
+
|
151 |
+
return $return;
|
152 |
+
}
|
153 |
+
|
154 |
+
/**
|
155 |
+
* Adds ga dashboard widget HTML code for a WordPress Dashboard widget hook.
|
156 |
+
*/
|
157 |
+
public static function add_ga_dashboard_widget() {
|
158 |
+
$widget = self::get_ga_dashboard_widget(
|
159 |
+
null,
|
160 |
+
false,
|
161 |
+
false,
|
162 |
+
true
|
163 |
+
);
|
164 |
+
|
165 |
+
echo wp_kses(
|
166 |
+
$widget,
|
167 |
+
array(
|
168 |
+
'a' => array(
|
169 |
+
'href' => array(),
|
170 |
+
),
|
171 |
+
'button' => array(
|
172 |
+
'class' => array(),
|
173 |
+
'id' => array(),
|
174 |
+
'style' => array(),
|
175 |
+
),
|
176 |
+
'div' => array(
|
177 |
+
'class' => array(),
|
178 |
+
'id' => array(),
|
179 |
+
'style' => array(),
|
180 |
+
),
|
181 |
+
'select' => array(
|
182 |
+
'id' => array(),
|
183 |
+
'autocomplete' => array(),
|
184 |
+
),
|
185 |
+
'script' => array(
|
186 |
+
'type' => array(),
|
187 |
+
),
|
188 |
+
'option' => array(
|
189 |
+
'value' => array(),
|
190 |
+
'selected' => array(),
|
191 |
+
),
|
192 |
+
)
|
193 |
+
);
|
194 |
+
}
|
195 |
+
|
196 |
+
/**
|
197 |
+
* Generates dashboard widget HTML code.
|
198 |
+
*
|
199 |
+
* @param string $date_range Google Analytics specific date range string.
|
200 |
+
* @param boolean $text_mode Text mode.
|
201 |
+
* @param boolean $ajax Ajax.
|
202 |
+
* @param boolean $trigger_request Trigger request.
|
203 |
+
*
|
204 |
+
* @return null | string HTML dashboard widget code.
|
205 |
+
*/
|
206 |
+
public static function get_ga_dashboard_widget(
|
207 |
+
$date_range = null,
|
208 |
+
$text_mode = false,
|
209 |
+
$ajax = false,
|
210 |
+
$trigger_request = false
|
211 |
+
) {
|
212 |
+
if ( empty( $date_range ) ) {
|
213 |
+
$date_range = '30daysAgo';
|
214 |
+
}
|
215 |
+
|
216 |
+
if ( false === $trigger_request ) {
|
217 |
+
// Get chart and boxes data.
|
218 |
+
$data = self::get_dashboard_widget_data( $date_range );
|
219 |
+
|
220 |
+
if ( $text_mode ) {
|
221 |
+
return self::get_chart_page(
|
222 |
+
'ga-dashboard-widget' . ( $ajax ? '_ajax' : '' ),
|
223 |
+
array(
|
224 |
+
'chart' => $data['chart'],
|
225 |
+
'boxes' => $data['boxes'],
|
226 |
+
)
|
227 |
+
);
|
228 |
+
} else {
|
229 |
+
return self::get_chart_page(
|
230 |
+
'ga-dashboard-widget' . ( $ajax ? '_ajax' : '' ),
|
231 |
+
array(
|
232 |
+
'chart' => $data['chart'],
|
233 |
+
'boxes' => $data['boxes'],
|
234 |
+
'more_details_url' => admin_url( self::GA_STATISTICS_PAGE_URL ),
|
235 |
+
'ga_nonce' => wp_create_nonce( 'ga_ajax_data_change' ),
|
236 |
+
'ga_nonce_name' => Ga_Admin_Controller::GA_NONCE_FIELD_NAME,
|
237 |
+
)
|
238 |
+
);
|
239 |
+
}
|
240 |
+
} else {
|
241 |
+
return self::get_chart_page(
|
242 |
+
'ga-dashboard-widget' . ( $ajax ? '_ajax' : '' ),
|
243 |
+
array(
|
244 |
+
'chart' => array(),
|
245 |
+
'boxes' => Ga_Stats::get_empty_boxes_structure(),
|
246 |
+
'more_details_url' => admin_url( self::GA_STATISTICS_PAGE_URL ),
|
247 |
+
'show_trigger_button' => true,
|
248 |
+
'ga_nonce' => wp_create_nonce( 'ga_ajax_data_change' ),
|
249 |
+
'ga_nonce_name' => Ga_Admin_Controller::GA_NONCE_FIELD_NAME,
|
250 |
+
)
|
251 |
+
);
|
252 |
+
}
|
253 |
+
|
254 |
+
return null;
|
255 |
+
}
|
256 |
+
|
257 |
+
/**
|
258 |
+
* Generates JSON data string for AJAX calls.
|
259 |
+
*
|
260 |
+
* @param string $date_range Date range.
|
261 |
+
* @param string $metric Metric string.
|
262 |
+
* @param boolean $text_mode Text mode.
|
263 |
+
* @param boolean $ajax Ajax.
|
264 |
+
*
|
265 |
+
* @return string|false Returns JSON data string
|
266 |
+
*/
|
267 |
+
public static function get_ga_dashboard_widget_data_json(
|
268 |
+
$date_range = null, $metric = null, $text_mode = false, $ajax = false
|
269 |
+
) {
|
270 |
+
if ( empty( $date_range ) ) {
|
271 |
+
$date_range = '30daysAgo';
|
272 |
+
}
|
273 |
+
|
274 |
+
if ( empty( $metric ) ) {
|
275 |
+
$metric = 'pageviews';
|
276 |
+
}
|
277 |
+
|
278 |
+
$data = self::get_dashboard_widget_data( $date_range, $metric );
|
279 |
+
|
280 |
+
return wp_json_encode( $data );
|
281 |
+
}
|
282 |
+
|
283 |
+
/**
|
284 |
+
* Gets dashboard widget data.
|
285 |
+
*
|
286 |
+
* @param string $date_range Date range string.
|
287 |
+
* @param string $metric Metric.
|
288 |
+
*
|
289 |
+
* @return array Return chart and boxes data
|
290 |
+
*/
|
291 |
+
private static function get_dashboard_widget_data( $date_range, $metric = null ) {
|
292 |
+
$selected = self::get_selected_account_data( true );
|
293 |
+
if ( self::is_authorized() && self::is_account_selected() ) {
|
294 |
+
$query_params = Ga_Stats::get_query( 'main_chart', $selected['view_id'], $date_range, $metric, true );
|
295 |
+
$stats_data = Ga_Admin::api_client()->call(
|
296 |
+
'ga_api_data',
|
297 |
+
array(
|
298 |
+
$query_params,
|
299 |
+
)
|
300 |
+
);
|
301 |
+
|
302 |
+
$boxes_query = Ga_Stats::get_query( 'dashboard_boxes', $selected['view_id'], $date_range, null, true );
|
303 |
+
$boxes_data = Ga_Admin::api_client()->call(
|
304 |
+
'ga_api_data',
|
305 |
+
array(
|
306 |
+
$boxes_query,
|
307 |
+
)
|
308 |
+
);
|
309 |
+
}
|
310 |
+
$chart = ! empty( $stats_data ) ? Ga_Stats::get_dashboard_chart( $stats_data->get_data() ) : array();
|
311 |
+
$boxes = ! empty( $boxes_data ) ? Ga_Stats::get_dashboard_boxes_data( $boxes_data->get_data() ) : array();
|
312 |
+
|
313 |
+
return array(
|
314 |
+
'chart' => $chart,
|
315 |
+
'boxes' => $boxes,
|
316 |
+
);
|
317 |
+
}
|
318 |
+
|
319 |
+
/**
|
320 |
+
* Is account selected?
|
321 |
+
*
|
322 |
+
* @return bool
|
323 |
+
*/
|
324 |
+
public static function is_account_selected() {
|
325 |
+
return false === empty( self::get_selected_account_data() );
|
326 |
+
}
|
327 |
+
|
328 |
+
/**
|
329 |
+
* Returns HTML code of the chart page or a notice.
|
330 |
+
*
|
331 |
+
* @param string $view View string.
|
332 |
+
* @param array $params Params array.
|
333 |
+
*
|
334 |
+
* @return string Returns HTML code
|
335 |
+
*/
|
336 |
+
public static function get_chart_page( $view, $params ) {
|
337 |
+
$message = sprintf(
|
338 |
+
/* translators: %s is the settings page URL. */
|
339 |
+
__( 'Statistics can only be seen after you authenticate with your Google account on the <a href="%s">Settings page</a>.' ),
|
340 |
+
admin_url( self::GA_SETTINGS_PAGE_URL )
|
341 |
+
);
|
342 |
+
|
343 |
+
if ( true === self::is_authorized() && false === self::is_code_manually_enabled() && false === self::is_all_feature_disabled() ) {
|
344 |
+
if ( true === self::is_account_selected() ) {
|
345 |
+
if ( false === empty( $params ) ) {
|
346 |
+
return Ga_View_Core::load( $view, $params, true );
|
347 |
+
} else {
|
348 |
+
return self::ga_oauth_notice( sprintf( 'Please configure your <a href="%s">Google Analytics settings</a>.', admin_url( self::GA_SETTINGS_PAGE_URL ) ) );
|
349 |
+
}
|
350 |
+
} else {
|
351 |
+
return self::ga_oauth_notice( $message );
|
352 |
+
}
|
353 |
+
} else {
|
354 |
+
return self::ga_oauth_notice( $message );
|
355 |
+
}
|
356 |
+
}
|
357 |
+
|
358 |
+
/**
|
359 |
+
* Checks whether users is authorized with Google.
|
360 |
+
*
|
361 |
+
* @return boolean
|
362 |
+
*/
|
363 |
+
public static function is_authorized() {
|
364 |
+
return Ga_Admin::api_client()->get_instance()->is_authorized();
|
365 |
+
}
|
366 |
+
|
367 |
+
/**
|
368 |
+
* Wrapper for WordPress method get_option
|
369 |
+
*
|
370 |
+
* @param string $name Option name.
|
371 |
+
* @param mixed|null $default Default value if fetched option is null.
|
372 |
+
*
|
373 |
+
* @return mixed|null
|
374 |
+
*/
|
375 |
+
public static function get_option( $name, $default = null ) {
|
376 |
+
$opt = get_option( $name, $default );
|
377 |
+
|
378 |
+
return false === empty( $opt ) ? $opt : $default;
|
379 |
+
}
|
380 |
+
|
381 |
+
/**
|
382 |
+
* Wrapper for WordPress method update_option
|
383 |
+
*
|
384 |
+
* @param string $name Option name.
|
385 |
+
* @param mixed $value Option value.
|
386 |
+
*
|
387 |
+
* @return null|boolean
|
388 |
+
*/
|
389 |
+
public static function update_option( $name, $value ) {
|
390 |
+
$opt = update_option( $name, $value );
|
391 |
+
|
392 |
+
return ! empty( $opt ) ? $opt : null;
|
393 |
+
}
|
394 |
+
|
395 |
+
/**
|
396 |
+
* Loads ga notice HTML code with given message included.
|
397 |
+
*
|
398 |
+
* @param string $message Message.
|
399 |
+
*
|
400 |
+
* @return string
|
401 |
+
*/
|
402 |
+
public static function ga_oauth_notice( $message ) {
|
403 |
+
return Ga_View_Core::load(
|
404 |
+
'ga-oauth-notice',
|
405 |
+
array(
|
406 |
+
'msg' => $message,
|
407 |
+
),
|
408 |
+
true
|
409 |
+
);
|
410 |
+
}
|
411 |
+
|
412 |
+
/**
|
413 |
+
* Displays notice following the WP style.
|
414 |
+
*
|
415 |
+
* @param string $message Message string.
|
416 |
+
* @param string $type Type string.
|
417 |
+
* @param bool $is_dismissable Whether the notice is dismissable.
|
418 |
+
* @param string $action Action type.
|
419 |
+
*
|
420 |
+
* @return string
|
421 |
+
*/
|
422 |
+
public static function ga_wp_notice( $message, $type = '', $is_dismissable = false, $action = array() ) {
|
423 |
+
return Ga_View_Core::load(
|
424 |
+
'ga-wp-notice',
|
425 |
+
array(
|
426 |
+
'notice_type' => empty( $type ) ? Ga_Admin::NOTICE_WARNING : $type,
|
427 |
+
'msg' => $message,
|
428 |
+
'is_dismissable' => $is_dismissable,
|
429 |
+
'action' => $action,
|
430 |
+
),
|
431 |
+
true
|
432 |
+
);
|
433 |
+
}
|
434 |
+
|
435 |
+
/**
|
436 |
+
* Gets data according to selected GA account.
|
437 |
+
*
|
438 |
+
* @param boolean $assoc Whether the return should be an associative array.
|
439 |
+
*
|
440 |
+
* @return mixed
|
441 |
+
*/
|
442 |
+
public static function get_selected_account_data( $assoc = false ) {
|
443 |
+
$data = json_decode( self::get_option( Ga_Admin::GA_SELECTED_ACCOUNT ) );
|
444 |
+
$data = ( false === empty( $data ) && 3 === count( $data ) ) ? $data : false;
|
445 |
+
|
446 |
+
if ( $data ) {
|
447 |
+
if ( $assoc ) {
|
448 |
+
return array(
|
449 |
+
'account_id' => $data[0],
|
450 |
+
'web_property_id' => $data[1],
|
451 |
+
'view_id' => $data[2],
|
452 |
+
);
|
453 |
+
} else {
|
454 |
+
return $data;
|
455 |
+
}
|
456 |
+
}
|
457 |
+
|
458 |
+
return false;
|
459 |
+
}
|
460 |
+
|
461 |
+
/**
|
462 |
+
* Checks whether option for manually UA-code.
|
463 |
+
*
|
464 |
+
* @return boolean
|
465 |
+
*/
|
466 |
+
public static function is_code_manually_enabled() {
|
467 |
+
return boolval( self::get_option( Ga_Admin::GA_WEB_PROPERTY_ID_MANUALLY_OPTION_NAME, false ) );
|
468 |
+
}
|
469 |
+
|
470 |
+
/**
|
471 |
+
* Adds percent sign to the given text.
|
472 |
+
*
|
473 |
+
* @param string $text Text string to format as a percentage.
|
474 |
+
*
|
475 |
+
* @return string
|
476 |
+
*/
|
477 |
+
public static function format_percent( $text ) {
|
478 |
+
$text = self::add_plus( $text );
|
479 |
+
|
480 |
+
return $text . '%';
|
481 |
+
}
|
482 |
+
|
483 |
+
/**
|
484 |
+
* Adds plus sign before number.
|
485 |
+
*
|
486 |
+
* @param string $number Number string.
|
487 |
+
*
|
488 |
+
* @return string
|
489 |
+
*/
|
490 |
+
public static function add_plus( $number ) {
|
491 |
+
if ( $number > 0 ) {
|
492 |
+
return '+' . $number;
|
493 |
+
}
|
494 |
+
|
495 |
+
return $number;
|
496 |
+
}
|
497 |
+
|
498 |
+
/**
|
499 |
+
* Check whether current user has administrator privileges.
|
500 |
+
*
|
501 |
+
* @return bool
|
502 |
+
*/
|
503 |
+
public static function is_administrator() {
|
504 |
+
if ( current_user_can( 'administrator' ) ) {
|
505 |
+
return true;
|
506 |
+
}
|
507 |
+
|
508 |
+
return false;
|
509 |
+
}
|
510 |
+
|
511 |
+
/**
|
512 |
+
* Is this WordPress version valid?
|
513 |
+
*
|
514 |
+
* @return bool|int
|
515 |
+
*/
|
516 |
+
public static function is_wp_version_valid() {
|
517 |
+
$wp_version = get_bloginfo( 'version' );
|
518 |
+
|
519 |
+
return version_compare( $wp_version, Ga_Admin::MIN_WP_VERSION, 'ge' );
|
520 |
+
}
|
521 |
+
|
522 |
+
/**
|
523 |
+
* Check if terms are accepted.
|
524 |
+
*
|
525 |
+
* @return bool
|
526 |
+
*/
|
527 |
+
public static function are_terms_accepted() {
|
528 |
+
return boolval( self::get_option( Ga_Admin::GA_SHARETHIS_TERMS_OPTION_NAME ) );
|
529 |
+
}
|
530 |
+
|
531 |
+
/**
|
532 |
+
* Check if sharethis scripts enabled.
|
533 |
+
*
|
534 |
+
* @return bool
|
535 |
+
*/
|
536 |
+
public static function is_sharethis_included() {
|
537 |
+
return boolval( GA_SHARETHIS_SCRIPTS_INCLUDED );
|
538 |
+
}
|
539 |
+
|
540 |
+
/**
|
541 |
+
* Is this PHP version valid?
|
542 |
+
*
|
543 |
+
* @return mixed
|
544 |
+
*/
|
545 |
+
public static function is_php_version_valid() {
|
546 |
+
$p = '#(\.0+)+($|-)#';
|
547 |
+
$ver1 = preg_replace( $p, '', phpversion() );
|
548 |
+
$ver2 = preg_replace( $p, '', self::PHP_VERSION_REQUIRED );
|
549 |
+
$operator = 'ge';
|
550 |
+
|
551 |
+
return version_compare( $ver1, $ver2, $operator );
|
552 |
+
}
|
553 |
+
|
554 |
+
/**
|
555 |
+
* Get current URL.
|
556 |
+
*
|
557 |
+
* @return mixed
|
558 |
+
*/
|
559 |
+
public static function get_current_url() {
|
560 |
+
return filter_input( INPUT_SERVER, 'REQUEST_URI', FILTER_SANITIZE_URL );
|
561 |
+
}
|
562 |
+
|
563 |
+
/**
|
564 |
+
* Create URL.
|
565 |
+
*
|
566 |
+
* @param string $url URL.
|
567 |
+
* @param array $data Data array.
|
568 |
+
*
|
569 |
+
* @return mixed|string
|
570 |
+
*/
|
571 |
+
public static function create_url( $url, $data = array() ) {
|
572 |
+
return false === empty( $data ) ?
|
573 |
+
( strstr( $url, '?' ) ?
|
574 |
+
( $url . '&' ) :
|
575 |
+
( $url . '?' ) ) . http_build_query( $data ) :
|
576 |
+
$url;
|
577 |
+
}
|
578 |
+
|
579 |
+
/**
|
580 |
+
* Create base64 url message
|
581 |
+
*
|
582 |
+
* @param string $msg Message.
|
583 |
+
* @param string $status Status.
|
584 |
+
*
|
585 |
+
* @return string
|
586 |
+
*/
|
587 |
+
public static function create_url_msg( $msg, $status ) {
|
588 |
+
$msg = array(
|
589 |
+
'status' => $status,
|
590 |
+
'message' => $msg,
|
591 |
+
);
|
592 |
+
|
593 |
+
return base64_encode( wp_json_encode( $msg ) ); // phpcs:ignore
|
594 |
+
}
|
595 |
+
|
596 |
+
/**
|
597 |
+
* Are all features disabled?
|
598 |
+
*
|
599 |
+
* @return bool
|
600 |
+
*/
|
601 |
+
public static function is_all_feature_disabled() {
|
602 |
+
return boolval( self::get_option( Ga_Admin::GA_DISABLE_ALL_FEATURES, false ) );
|
603 |
+
}
|
604 |
+
|
605 |
+
/**
|
606 |
+
* Are features enabled?
|
607 |
+
*
|
608 |
+
* @return bool
|
609 |
+
*/
|
610 |
+
public static function are_features_enabled() {
|
611 |
+
return true === self::are_terms_accepted() && false === self::is_all_feature_disabled();
|
612 |
+
}
|
613 |
+
|
614 |
+
/**
|
615 |
+
* Are ShareThis properties verified?
|
616 |
+
*
|
617 |
+
* @return bool
|
618 |
+
*/
|
619 |
+
public static function are_sharethis_properties_verified() {
|
620 |
+
return (
|
621 |
+
false !== get_option( Ga_Admin::GA_SHARETHIS_VERIFICATION_RESULT )
|
622 |
+
&& true === self::are_sharethis_properties_set()
|
623 |
+
);
|
624 |
+
}
|
625 |
+
|
626 |
+
/**
|
627 |
+
* Are ShareThis properties ready to verify?
|
628 |
+
*
|
629 |
+
* @return bool
|
630 |
+
*/
|
631 |
+
public static function are_sharethis_properties_ready_to_verify() {
|
632 |
+
return (
|
633 |
+
true === self::are_sharethis_properties_set()
|
634 |
+
&& false === get_option( Ga_Admin::GA_SHARETHIS_VERIFICATION_RESULT )
|
635 |
+
);
|
636 |
+
}
|
637 |
+
|
638 |
+
/**
|
639 |
+
* Are ShareThis properties set?
|
640 |
+
*
|
641 |
+
* @return bool
|
642 |
+
*/
|
643 |
+
public static function are_sharethis_properties_set() {
|
644 |
+
return (
|
645 |
+
false !== get_option( Ga_Admin::GA_SHARETHIS_PROPERTY_ID ) &&
|
646 |
+
false !== get_option( Ga_Admin::GA_SHARETHIS_PROPERTY_SECRET )
|
647 |
+
);
|
648 |
+
}
|
649 |
+
|
650 |
+
/**
|
651 |
+
* Should we create the ShareThis property?
|
652 |
+
*
|
653 |
+
* @return bool
|
654 |
+
*/
|
655 |
+
public static function should_create_sharethis_property() {
|
656 |
+
return true === self::are_features_enabled() && false === self::are_sharethis_properties_set();
|
657 |
+
}
|
658 |
+
|
659 |
+
/**
|
660 |
+
* Should we verify the ShareThis installation?
|
661 |
+
*
|
662 |
+
* @return bool
|
663 |
+
*/
|
664 |
+
public static function should_verify_sharethis_installation() {
|
665 |
+
return true === self::are_features_enabled() && true === self::are_sharethis_properties_ready_to_verify();
|
666 |
+
}
|
667 |
+
|
668 |
+
/**
|
669 |
+
* Get tooltip.
|
670 |
+
*
|
671 |
+
* @return string
|
672 |
+
*/
|
673 |
+
public static function get_tooltip() {
|
674 |
+
if ( false === self::are_terms_accepted() ) {
|
675 |
+
return self::GA_TOOLTIP_TERMS_NOT_ACCEPTED;
|
676 |
+
} elseif ( false === self::are_features_enabled() ) {
|
677 |
+
return self::GA_TOOLTIP_FEATURES_DISABLED;
|
678 |
+
} else {
|
679 |
+
return '';
|
680 |
+
}
|
681 |
+
}
|
682 |
+
|
683 |
+
/**
|
684 |
+
* Is this version of WordPress considered old (< 4.1)?
|
685 |
+
*
|
686 |
+
* @return bool True if old, False if not.
|
687 |
+
*/
|
688 |
+
public static function is_wp_old() {
|
689 |
+
return version_compare( get_bloginfo( 'version' ), self::GA_WP_MODERN_VERSION, 'lt' );
|
690 |
+
}
|
691 |
+
|
692 |
+
/**
|
693 |
+
* Should we load GA JavaScript on this property?
|
694 |
+
*
|
695 |
+
* @param string $web_property_id Web property ID.
|
696 |
+
*
|
697 |
+
* @return bool
|
698 |
+
*/
|
699 |
+
public static function should_load_ga_javascript( $web_property_id ) {
|
700 |
+
return true === self::is_configured( $web_property_id )
|
701 |
+
&& (
|
702 |
+
true === self::can_add_ga_code()
|
703 |
+
|| true === self::is_all_feature_disabled()
|
704 |
+
);
|
705 |
+
}
|
706 |
+
|
707 |
+
/**
|
708 |
+
* Get account ID.
|
709 |
+
*
|
710 |
+
* @return string
|
711 |
+
*/
|
712 |
+
public static function get_account_id() {
|
713 |
+
$account_id = json_decode( self::get_option( Ga_Admin::GA_SELECTED_ACCOUNT ) );
|
714 |
+
|
715 |
+
return ! empty( $account_id[0] ) ? $account_id[0] : '';
|
716 |
+
}
|
717 |
+
|
718 |
+
/**
|
719 |
+
* Is curl disabled?
|
720 |
+
*
|
721 |
+
* @return bool True if disabled, false if enabled.
|
722 |
+
*/
|
723 |
+
public static function is_curl_disabled() {
|
724 |
+
return ! function_exists( 'curl_version' );
|
725 |
+
}
|
726 |
+
|
727 |
+
/**
|
728 |
+
* Get URL with correct protocol.
|
729 |
+
*
|
730 |
+
* @return string URL with correct protocol.
|
731 |
+
*/
|
732 |
+
public static function get_plugin_url_with_correct_protocol() {
|
733 |
+
return GA_PLUGIN_URL;
|
734 |
+
}
|
735 |
+
|
736 |
+
/**
|
737 |
+
* Get code to manually label classes.
|
738 |
+
*
|
739 |
+
* @return string
|
740 |
+
*/
|
741 |
+
public static function get_code_manually_label_classes() {
|
742 |
+
$classes = '';
|
743 |
+
if ( ! self::are_features_enabled() ) {
|
744 |
+
$classes = 'label-grey ga-tooltip';
|
745 |
+
} elseif ( self::is_account_selected() ) {
|
746 |
+
$classes = 'label-grey';
|
747 |
+
}
|
748 |
+
return $classes;
|
749 |
+
}
|
750 |
+
|
751 |
+
/**
|
752 |
+
* Get Previous Period for Dates (date start and date end).
|
753 |
+
*
|
754 |
+
* @param string $date_start Date string.
|
755 |
+
* @param string $date_end Date string.
|
756 |
+
*
|
757 |
+
* @return array Array of start and end dates in Y-m-d format.
|
758 |
+
* @since 2.5.2
|
759 |
+
*/
|
760 |
+
public static function get_previous_period_for_dates( $date_start = '', $date_end = '' ) {
|
761 |
+
try {
|
762 |
+
// Get distance between dates in days.
|
763 |
+
$start = new DateTime( $date_start );
|
764 |
+
$end = new DateTime( $date_end );
|
765 |
+
} catch ( \Exception $e ) {
|
766 |
+
return array(
|
767 |
+
'start' => gmdate( 'Y-m-d', strtotime( '-1 week' ) ),
|
768 |
+
'end' => gmdate( 'Y-m-d' ),
|
769 |
+
);
|
770 |
+
}
|
771 |
+
|
772 |
+
// Clone $start date into end_previous so we don't modify $start.
|
773 |
+
$end_previous = clone $start;
|
774 |
+
|
775 |
+
// Set the period to the difference between the start/end dates in days.
|
776 |
+
$period = $end->diff( $start )->days;
|
777 |
+
|
778 |
+
// Subtract 1 day from $end_previous so it's one day before $start.
|
779 |
+
$end_previous->modify( '-1 day' );
|
780 |
+
|
781 |
+
// Clone $end_previous so we can subtract $period from it in days.
|
782 |
+
$start_previous = clone $end_previous;
|
783 |
+
$start_previous->modify( sprintf( '-%d day', $period ) );
|
784 |
+
|
785 |
+
return array(
|
786 |
+
'start' => $start_previous->format( 'Y-m-d' ),
|
787 |
+
'end' => $end_previous->format( 'Y-m-d' ),
|
788 |
+
);
|
789 |
+
}
|
790 |
+
|
791 |
+
/**
|
792 |
+
* Get period between dates in days.
|
793 |
+
*
|
794 |
+
* @param string $date_start Start date string.
|
795 |
+
* @param string $date_end End date string.
|
796 |
+
*
|
797 |
+
* @return int
|
798 |
+
* @since 2.5.2
|
799 |
+
*/
|
800 |
+
public static function get_period_in_days( $date_start = '', $date_end = '' ) {
|
801 |
+
$date_start = empty( $date_start ) ? gmdate( 'Y-m-d', strtotime( '-1 week' ) ) : $date_start;
|
802 |
+
$date_end = empty( $date_end ) ? gmdate( 'Y-m-d' ) : $date_end;
|
803 |
+
|
804 |
+
try {
|
805 |
+
// Get distance between dates in days.
|
806 |
+
$start = new DateTime( $date_start );
|
807 |
+
$end = new DateTime( $date_end );
|
808 |
+
} catch ( \Exception $e ) {
|
809 |
+
return 0;
|
810 |
+
}
|
811 |
+
|
812 |
+
// Set the period to the difference between the start/end dates in days.
|
813 |
+
return intval( $start->diff( $end )->format( '%r%a' ) );
|
814 |
+
}
|
815 |
+
|
816 |
+
/**
|
817 |
+
* Get period in Days as words.
|
818 |
+
*
|
819 |
+
* @param string $date_start Start date string.
|
820 |
+
* @param string $date_end End date string.
|
821 |
+
*
|
822 |
+
* @return string Words to indicate days.
|
823 |
+
* @since 2.5.2
|
824 |
+
*/
|
825 |
+
public static function get_period_in_days_words( $date_start = '', $date_end = '' ) {
|
826 |
+
$days = self::get_period_in_days( $date_start, $date_end );
|
827 |
+
|
828 |
+
$date_end = empty( $date_end ) ? strtotime( 'now' ) : strtotime( $date_end );
|
829 |
+
|
830 |
+
// If today is the same as the end date.
|
831 |
+
if ( gmdate( 'Y-m-d', $date_end ) === gmdate( 'Y-m-d' ) ) {
|
832 |
+
if ( 0 === $days ) {
|
833 |
+
return __( 'Today', 'googleanalytics' );
|
834 |
+
}
|
835 |
+
|
836 |
+
if ( 7 === $days ) {
|
837 |
+
return __( 'This Week', 'googleanalytics' );
|
838 |
+
}
|
839 |
+
|
840 |
+
return sprintf(
|
841 |
+
/* translators: %d stands for the Day or Days. */
|
842 |
+
_n( 'Last %d Day', 'Last %d Days', $days, 'googleanalytics' ),
|
843 |
+
$days
|
844 |
+
);
|
845 |
+
}
|
846 |
+
|
847 |
+
return sprintf(
|
848 |
+
/* translators: %d stands for the Day or Days. */
|
849 |
+
_n( '%d Day', '%d Days', $days, 'googleanalytics' ),
|
850 |
+
$days
|
851 |
+
);
|
852 |
+
}
|
853 |
+
|
854 |
+
/**
|
855 |
+
* Get date range from GET request.
|
856 |
+
*
|
857 |
+
* @return array
|
858 |
+
* @since 2.5.2
|
859 |
+
*/
|
860 |
+
public static function get_date_range_from_request() {
|
861 |
+
$date_range = filter_input_array(
|
862 |
+
INPUT_GET,
|
863 |
+
array(
|
864 |
+
'date_from' => FILTER_SANITIZE_STRING,
|
865 |
+
'date_to' => FILTER_SANITIZE_STRING,
|
866 |
+
)
|
867 |
+
);
|
868 |
+
|
869 |
+
// If date_from is after date_to, let's reset 'from' to a week before 'to'.
|
870 |
+
if ( 0 > self::get_period_in_days( $date_range['date_from'], $date_range['date_to'] ) ) {
|
871 |
+
try {
|
872 |
+
$date = new DateTime( $date_range['date_to'] );
|
873 |
+
$date->modify( '-1 week' );
|
874 |
+
|
875 |
+
$date_from = $date->format( 'Y-m-d' );
|
876 |
+
} catch ( \Exception $e ) {
|
877 |
+
$date_from = gmdate( 'Y-m-d', strtotime( '-1 week' ) );
|
878 |
+
}
|
879 |
+
|
880 |
+
$date_range['date_from'] = $date_from;
|
881 |
+
}
|
882 |
+
|
883 |
+
return array(
|
884 |
+
'from' => $date_range['date_from'],
|
885 |
+
'to' => $date_range['date_to'],
|
886 |
+
);
|
887 |
+
}
|
888 |
+
}
|
class/{Ga_Hook.php → class-ga-hook.php}
RENAMED
@@ -1,16 +1,23 @@
|
|
1 |
<?php
|
|
|
|
|
|
|
|
|
|
|
2 |
|
|
|
|
|
|
|
3 |
class Ga_Hook {
|
4 |
|
5 |
/**
|
6 |
* Adds WordPress hooks.
|
7 |
*
|
8 |
-
* @param string $plugin_file_path
|
9 |
*/
|
10 |
public static function add_hooks( $plugin_file_path ) {
|
11 |
register_activation_hook( $plugin_file_path, 'Ga_Admin::activate_googleanalytics' );
|
12 |
register_deactivation_hook( $plugin_file_path, 'Ga_Admin::deactivate_googleanalytics' );
|
13 |
register_uninstall_hook( $plugin_file_path, 'Ga_Admin::uninstall_googleanalytics' );
|
14 |
}
|
15 |
-
|
16 |
}
|
1 |
<?php
|
2 |
+
/**
|
3 |
+
* Google Analytics hook class.
|
4 |
+
*
|
5 |
+
* @package GoogleAnalytics
|
6 |
+
*/
|
7 |
|
8 |
+
/**
|
9 |
+
* Hook class.
|
10 |
+
*/
|
11 |
class Ga_Hook {
|
12 |
|
13 |
/**
|
14 |
* Adds WordPress hooks.
|
15 |
*
|
16 |
+
* @param string $plugin_file_path Plugin file path string.
|
17 |
*/
|
18 |
public static function add_hooks( $plugin_file_path ) {
|
19 |
register_activation_hook( $plugin_file_path, 'Ga_Admin::activate_googleanalytics' );
|
20 |
register_deactivation_hook( $plugin_file_path, 'Ga_Admin::deactivate_googleanalytics' );
|
21 |
register_uninstall_hook( $plugin_file_path, 'Ga_Admin::uninstall_googleanalytics' );
|
22 |
}
|
|
|
23 |
}
|
class/class-ga-notice.php
ADDED
@@ -0,0 +1,54 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Google Analytics notice.
|
4 |
+
*
|
5 |
+
* @package GoogleAnalytics
|
6 |
+
*/
|
7 |
+
|
8 |
+
/**
|
9 |
+
* Notice class.
|
10 |
+
*/
|
11 |
+
class Ga_Notice {
|
12 |
+
|
13 |
+
/**
|
14 |
+
* Get translated error message.
|
15 |
+
*
|
16 |
+
* @param string $error Error string.
|
17 |
+
*
|
18 |
+
* @return string Translated error string.
|
19 |
+
*/
|
20 |
+
public static function get_message( $error ) {
|
21 |
+
$message = '';
|
22 |
+
|
23 |
+
if ( Ga_Helper::GA_DEBUG_MODE ) {
|
24 |
+
$message = Ga_Helper::ga_wp_notice(
|
25 |
+
( ! empty( $error['class'] ) ? esc_html( '[' . $error['class'] . ']' ) : '' ) . ' ' . $error['message'],
|
26 |
+
'error'
|
27 |
+
);
|
28 |
+
} elseif ( 'Ga_Lib_Google_Api_Client_AuthCode_Exception' === $error['class'] ) {
|
29 |
+
$message = Ga_Helper::ga_wp_notice( $error['message'], 'error' );
|
30 |
+
} elseif ( 'Ga_Lib_Sharethis_Api_Client_InvalidDomain_Exception' === $error['class'] ) {
|
31 |
+
$message = Ga_Helper::ga_wp_notice( $error['message'], 'error' );
|
32 |
+
} elseif ( 'Ga_Lib_Sharethis_Api_Client_Invite_Exception' === $error['class'] ) {
|
33 |
+
$message = Ga_Helper::ga_wp_notice( $error['message'], 'error' );
|
34 |
+
} elseif (
|
35 |
+
in_array(
|
36 |
+
$error['class'],
|
37 |
+
array( 'Ga_Lib_Sharethis_Api_Client_Verify_Exception', 'Ga_Lib_Sharethis_Api_Client_Alerts_Exception' ),
|
38 |
+
true
|
39 |
+
)
|
40 |
+
) {
|
41 |
+
$message = Ga_Helper::ga_wp_notice( $error['message'], 'error' );
|
42 |
+
} elseif ( 'Ga_Data_Outdated_Exception' === $error['class'] ) {
|
43 |
+
$message = Ga_Helper::ga_wp_notice( $error['message'], 'warning' );
|
44 |
+
} else {
|
45 |
+
$message = Ga_Helper::ga_wp_notice(
|
46 |
+
__( 'There are temporary connection issues, please try again later or go to Google Analytics website to see the dashboards' ),
|
47 |
+
'error'
|
48 |
+
);
|
49 |
+
}
|
50 |
+
|
51 |
+
return $message;
|
52 |
+
}
|
53 |
+
|
54 |
+
}
|
class/class-ga-sharethis.php
ADDED
@@ -0,0 +1,146 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Ga_Sharethis class
|
4 |
+
*
|
5 |
+
* Preparing request and parsing response from Sharethis Platform Api.
|
6 |
+
*
|
7 |
+
* @package GoogleAnalytics
|
8 |
+
*/
|
9 |
+
|
10 |
+
/**
|
11 |
+
* Sharethis class.
|
12 |
+
*/
|
13 |
+
class Ga_Sharethis {
|
14 |
+
|
15 |
+
/**
|
16 |
+
* Get body decoded from JSON.
|
17 |
+
*
|
18 |
+
* @param string $data Data string.
|
19 |
+
*
|
20 |
+
* @return mixed
|
21 |
+
*/
|
22 |
+
public static function get_body( $data ) {
|
23 |
+
$body = $data->getBody();
|
24 |
+
return json_decode( $body );
|
25 |
+
}
|
26 |
+
|
27 |
+
/**
|
28 |
+
* Create sharethis options.
|
29 |
+
*
|
30 |
+
* @param object $api_client API client.
|
31 |
+
*
|
32 |
+
* @return array
|
33 |
+
*/
|
34 |
+
public static function create_sharethis_options( $api_client ) {
|
35 |
+
$data = array();
|
36 |
+
$parsed_url = wp_parse_url( get_option( 'siteurl' ) );
|
37 |
+
$domain = $parsed_url['host'] . ( ! empty( $parsed_url['path'] ) ? $parsed_url['path'] : '' );
|
38 |
+
$query_params = array(
|
39 |
+
'domain' => $domain,
|
40 |
+
'is_wordpress' => true,
|
41 |
+
'onboarding_product' => 'ga',
|
42 |
+
);
|
43 |
+
$response = $api_client->call(
|
44 |
+
'ga_api_create_sharethis_property',
|
45 |
+
array(
|
46 |
+
$query_params,
|
47 |
+
)
|
48 |
+
);
|
49 |
+
$sharethis_options = self::get_sharethis_options( $response );
|
50 |
+
if ( ! empty( $sharethis_options['id'] ) ) {
|
51 |
+
add_option( Ga_Admin::GA_SHARETHIS_PROPERTY_ID, $sharethis_options['id'] );
|
52 |
+
}
|
53 |
+
if ( ! empty( $sharethis_options['secret'] ) ) {
|
54 |
+
add_option( Ga_Admin::GA_SHARETHIS_PROPERTY_SECRET, $sharethis_options['secret'] );
|
55 |
+
}
|
56 |
+
|
57 |
+
return $data;
|
58 |
+
}
|
59 |
+
|
60 |
+
/**
|
61 |
+
* Get ShareThis options array.
|
62 |
+
*
|
63 |
+
* @param object $response Response object.
|
64 |
+
*
|
65 |
+
* @return array
|
66 |
+
*/
|
67 |
+
public static function get_sharethis_options( $response ) {
|
68 |
+
$body = self::get_body( $response );
|
69 |
+
$options = array();
|
70 |
+
if ( ! empty( $body ) ) {
|
71 |
+
foreach ( $body as $key => $value ) {
|
72 |
+
if ( '_id' === $key ) {
|
73 |
+
$options['id'] = $value;
|
74 |
+
} elseif ( 'secret' === $key ) {
|
75 |
+
$options['secret'] = $value;
|
76 |
+
} elseif ( 'error' === $key ) {
|
77 |
+
$options['error'] = $value;
|
78 |
+
}
|
79 |
+
}
|
80 |
+
} else {
|
81 |
+
$options['error'] = 'error';
|
82 |
+
}
|
83 |
+
return $options;
|
84 |
+
}
|
85 |
+
|
86 |
+
/**
|
87 |
+
* Installation verification.
|
88 |
+
*
|
89 |
+
* @param object $api_client API Client object.
|
90 |
+
*
|
91 |
+
* @return void
|
92 |
+
*/
|
93 |
+
public static function sharethis_installation_verification( $api_client ) {
|
94 |
+
if ( Ga_Helper::should_verify_sharethis_installation() ) {
|
95 |
+
$query_params = array(
|
96 |
+
'id' => get_option( Ga_Admin::GA_SHARETHIS_PROPERTY_ID ),
|
97 |
+
'secret' => get_option( Ga_Admin::GA_SHARETHIS_PROPERTY_SECRET ),
|
98 |
+
);
|
99 |
+
$response = $api_client->call(
|
100 |
+
'ga_api_sharethis_installation_verification',
|
101 |
+
array(
|
102 |
+
$query_params,
|
103 |
+
)
|
104 |
+
);
|
105 |
+
$result = self::get_verification_result( $response );
|
106 |
+
if ( ! empty( $result ) ) {
|
107 |
+
add_option( Ga_Admin::GA_SHARETHIS_VERIFICATION_RESULT, true );
|
108 |
+
}
|
109 |
+
}
|
110 |
+
}
|
111 |
+
|
112 |
+
/**
|
113 |
+
* Get verification result.
|
114 |
+
*
|
115 |
+
* @param object $response Response object.
|
116 |
+
*
|
117 |
+
* @return bool
|
118 |
+
*/
|
119 |
+
public static function get_verification_result( $response ) {
|
120 |
+
$body = self::get_body( $response );
|
121 |
+
if ( ! empty( $body->{'status'} ) ) {
|
122 |
+
return true;
|
123 |
+
}
|
124 |
+
return false;
|
125 |
+
}
|
126 |
+
|
127 |
+
/**
|
128 |
+
* Get alerts.
|
129 |
+
*
|
130 |
+
* @param object $response Response object.
|
131 |
+
*
|
132 |
+
* @return array|mixed|object
|
133 |
+
*/
|
134 |
+
public static function get_alerts( $response ) {
|
135 |
+
$body = self::get_body( $response );
|
136 |
+
if ( false === empty( $body ) ) {
|
137 |
+
if ( false === empty( $body['error'] ) ) {
|
138 |
+
return (object) array( 'error' => $body['error'] );
|
139 |
+
}
|
140 |
+
|
141 |
+
return $body;
|
142 |
+
} else {
|
143 |
+
return array();
|
144 |
+
}
|
145 |
+
}
|
146 |
+
}
|
class/class-ga-stats.php
ADDED
@@ -0,0 +1,1083 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Google Analytics hook class.
|
4 |
+
*
|
5 |
+
* @package GoogleAnalytics
|
6 |
+
*/
|
7 |
+
|
8 |
+
/**
|
9 |
+
* Ga_Stats class
|
10 |
+
*
|
11 |
+
* Preparing request and parsing response from Google Analytics Reporting Api
|
12 |
+
*
|
13 |
+
* @author wle@adips.com
|
14 |
+
* @version 1.0
|
15 |
+
*/
|
16 |
+
class Ga_Stats {
|
17 |
+
|
18 |
+
/**
|
19 |
+
* Profile object.
|
20 |
+
*
|
21 |
+
* @var array Profile.
|
22 |
+
*/
|
23 |
+
private $profile = array();
|
24 |
+
|
25 |
+
/**
|
26 |
+
* Primary class constructor.
|
27 |
+
*
|
28 |
+
* @access public
|
29 |
+
* @since 7.0.0
|
30 |
+
*/
|
31 |
+
public function __construct() {
|
32 |
+
}
|
33 |
+
|
34 |
+
/**
|
35 |
+
* Preparing query to get Analytics data
|
36 |
+
*
|
37 |
+
* @param string $query Query type.
|
38 |
+
* @param int $id_view The Analytics view ID from which to retrieve data.
|
39 |
+
* @param string $date_range The start date for the query in the format YYYY-MM-DD or '7daysAgo'.
|
40 |
+
* @param string $metric A metric expression.
|
41 |
+
* @param bool $old Use old query style.
|
42 |
+
*
|
43 |
+
* @return array Request query
|
44 |
+
*/
|
45 |
+
public static function get_query( $query, $id_view, $date_range = null, $metric = null, $old = false ) {
|
46 |
+
if ( 'main_chart' === $query ) {
|
47 |
+
return $old ? self::main_chart_query_old( $id_view, $date_range, $metric ) : self::main_chart_query(
|
48 |
+
$id_view,
|
49 |
+
$date_range,
|
50 |
+
$metric
|
51 |
+
);
|
52 |
+
} elseif ( 'gender' === $query ) {
|
53 |
+
return self::gender_chart_query( $id_view, $date_range, $metric );
|
54 |
+
} elseif ( 'device' === $query ) {
|
55 |
+
return self::device_chart_query( $id_view, $date_range, $metric );
|
56 |
+
} elseif ( 'age' === $query ) {
|
57 |
+
return self::age_chart_query( $id_view, $date_range, $metric );
|
58 |
+
} elseif ( 'boxes' === $query ) {
|
59 |
+
return self::boxes_query( $id_view );
|
60 |
+
} elseif ( 'dashboard_boxes' === $query ) {
|
61 |
+
return $old ? self::dashboard_boxes_query_old( $id_view, $date_range ) :
|
62 |
+
self::dashboard_boxes_query( $id_view, $date_range );
|
63 |
+
} elseif ( 'sources' === $query ) {
|
64 |
+
return self::sources_query( $id_view, $date_range );
|
65 |
+
} else {
|
66 |
+
return array();
|
67 |
+
}
|
68 |
+
}
|
69 |
+
|
70 |
+
/**
|
71 |
+
* Preparing query for top traffic sources table
|
72 |
+
*
|
73 |
+
* @param int $id_view The Analytics view ID from which to retrieve data.
|
74 |
+
* @param array $date_ranges An array representing the date ranges that will be passed to chart query.
|
75 |
+
*
|
76 |
+
* @return array Sources query
|
77 |
+
*/
|
78 |
+
public static function sources_query( $id_view, $date_ranges ) {
|
79 |
+
$reports_requests = array();
|
80 |
+
|
81 |
+
$ts = filter_input( INPUT_GET, 'ts', FILTER_SANITIZE_STRING );
|
82 |
+
|
83 |
+
if ( false === empty( $ts ) ) {
|
84 |
+
$reports_requests[] = array(
|
85 |
+
'viewId' => $id_view,
|
86 |
+
'dateRanges' => $date_ranges,
|
87 |
+
'metrics' => self::set_metrics( array( 'ga:pageviews' ) ),
|
88 |
+
'includeEmptyRows' => true,
|
89 |
+
'pageSize' => 10,
|
90 |
+
'dimensions' => self::set_dimensions( 'ga:sourceMedium' ),
|
91 |
+
'orderBys' => self::set_order_bys( 'ga:pageviews', 'DESCENDING' ),
|
92 |
+
);
|
93 |
+
} else {
|
94 |
+
$reports_requests[] = array(
|
95 |
+
'viewId' => $id_view,
|
96 |
+
'dateRanges' => $date_ranges,
|
97 |
+
'metrics' => self::set_metrics(
|
98 |
+
array(
|
99 |
+
'ga:pageviews',
|
100 |
+
'ga:uniquePageviews',
|
101 |
+
'ga:timeOnPage',
|
102 |
+
'ga:bounces',
|
103 |
+
'ga:entrances',
|
104 |
+
'ga:exits',
|
105 |
+
)
|
106 |
+
),
|
107 |
+
'includeEmptyRows' => true,
|
108 |
+
'pageSize' => 10,
|
109 |
+
'dimensions' => self::set_dimensions( 'ga:pagePath' ),
|
110 |
+
'orderBys' => self::set_order_bys( 'ga:pageviews', 'DESCENDING' ),
|
111 |
+
);
|
112 |
+
}
|
113 |
+
|
114 |
+
$query = array(
|
115 |
+
'reportRequests' => $reports_requests,
|
116 |
+
);
|
117 |
+
|
118 |
+
return $query;
|
119 |
+
}
|
120 |
+
|
121 |
+
/**
|
122 |
+
* Preparing query for dashboard boxes
|
123 |
+
*
|
124 |
+
* @param int $id_view The Analytics view ID from which to retrieve data.
|
125 |
+
* @param array $date_ranges An array representing the date ranges that will be passed to chart query.
|
126 |
+
*
|
127 |
+
* @return array Dashboard boxes query
|
128 |
+
*/
|
129 |
+
public static function dashboard_boxes_query( $id_view, $date_ranges ) {
|
130 |
+
$reports_requests = array();
|
131 |
+
|
132 |
+
$ts = filter_input( INPUT_GET, 'ts', FILTER_SANITIZE_STRING );
|
133 |
+
|
134 |
+
if ( false === empty( $ts ) ) {
|
135 |
+
$reports_requests[] = array(
|
136 |
+
'viewId' => $id_view,
|
137 |
+
'dateRanges' => $date_ranges,
|
138 |
+
'metrics' => self::set_metrics( array( 'ga:pageviews' ) ),
|
139 |
+
'includeEmptyRows' => true,
|
140 |
+
'pageSize' => 10,
|
141 |
+
'dimensions' => self::set_dimensions( 'ga:sourceMedium' ),
|
142 |
+
'orderBys' => self::set_order_bys( 'ga:pageviews', 'DESCENDING' ),
|
143 |
+
);
|
144 |
+
} else {
|
145 |
+
$reports_requests[] = array(
|
146 |
+
'viewId' => $id_view,
|
147 |
+
'dateRanges' => $date_ranges,
|
148 |
+
'metrics' => self::set_metrics(
|
149 |
+
array(
|
150 |
+
'ga:pageviews',
|
151 |
+
'ga:uniquePageviews',
|
152 |
+
'ga:timeOnPage',
|
153 |
+
'ga:bounces',
|
154 |
+
'ga:entrances',
|
155 |
+
'ga:exits',
|
156 |
+
)
|
157 |
+
),
|
158 |
+
'includeEmptyRows' => true,
|
159 |
+
'pageSize' => 10,
|
160 |
+
'dimensions' => self::set_dimensions( 'ga:pagePath' ),
|
161 |
+
'orderBys' => self::set_order_bys( 'ga:pageviews', 'DESCENDING' ),
|
162 |
+
);
|
163 |
+
}
|
164 |
+
$query = array(
|
165 |
+
'reportRequests' => $reports_requests,
|
166 |
+
);
|
167 |
+
|
168 |
+
return $query;
|
169 |
+
}
|
170 |
+
|
171 |
+
/**
|
172 |
+
* Preparing query for dashboard boxes
|
173 |
+
*
|
174 |
+
* @param int $id_view The Analytics view ID from which to retrieve data.
|
175 |
+
* @param string $date_range The start date for the query in the format YYYY-MM-DD or '7daysAgo'.
|
176 |
+
*
|
177 |
+
* @return array Dashboard boxes query
|
178 |
+
* @deprecated
|
179 |
+
*/
|
180 |
+
public static function dashboard_boxes_query_old( $id_view, $date_range ) {
|
181 |
+
$reports_requests = array();
|
182 |
+
|
183 |
+
$th = filter_input( INPUT_GET, 'th', FILTER_SANITIZE_STRING );
|
184 |
+
$ts = filter_input( INPUT_GET, 'ts', FILTER_SANITIZE_STRING );
|
185 |
+
|
186 |
+
$days_ago = false === empty( $th ) ? '30daysAgo' : '7daysAgo';
|
187 |
+
|
188 |
+
if ( false === empty( $ts ) ) {
|
189 |
+
$reports_requests[] = array(
|
190 |
+
'viewId' => $id_view,
|
191 |
+
'dateRanges' => self::set_date_ranges( $days_ago, 'yesterday' ),
|
192 |
+
'metrics' => self::set_metrics( array( 'ga:pageviews' ) ),
|
193 |
+
'includeEmptyRows' => true,
|
194 |
+
'pageSize' => 10,
|
195 |
+
'dimensions' => self::set_dimensions( 'ga:sourceMedium' ),
|
196 |
+
'orderBys' => self::set_order_bys( 'ga:pageviews', 'DESCENDING' ),
|
197 |
+
);
|
198 |
+
} else {
|
199 |
+
$reports_requests[] = array(
|
200 |
+
'viewId' => $id_view,
|
201 |
+
'dateRanges' => self::set_date_ranges( $days_ago, 'yesterday' ),
|
202 |
+
'metrics' => self::set_metrics(
|
203 |
+
array(
|
204 |
+
'ga:pageviews',
|
205 |
+
'ga:uniquePageviews',
|
206 |
+
'ga:timeOnPage',
|
207 |
+
'ga:bounces',
|
208 |
+
'ga:entrances',
|
209 |
+
'ga:exits',
|
210 |
+
)
|
211 |
+
),
|
212 |
+
'includeEmptyRows' => true,
|
213 |
+
'pageSize' => 10,
|
214 |
+
'dimensions' => self::set_dimensions( 'ga:pagePath' ),
|
215 |
+
'orderBys' => self::set_order_bys( 'ga:pageviews', 'DESCENDING' ),
|
216 |
+
);
|
217 |
+
}
|
218 |
+
$query = array(
|
219 |
+
'reportRequests' => $reports_requests,
|
220 |
+
);
|
221 |
+
|
222 |
+
return $query;
|
223 |
+
}
|
224 |
+
|
225 |
+
/**
|
226 |
+
* Preparing query for stats boxes
|
227 |
+
*
|
228 |
+
* @param int $id_view The Analytics view ID from which to retrieve data.
|
229 |
+
*
|
230 |
+
* @return array Boxes query
|
231 |
+
*/
|
232 |
+
public static function boxes_query( $id_view ) {
|
233 |
+
$th = filter_input( INPUT_GET, 'th', FILTER_SANITIZE_STRING );
|
234 |
+
|
235 |
+
$range = false === empty( $th ) ? '30daysAgo' : '7daysAgo';
|
236 |
+
$range_s_prev = false === empty( $th ) ? '60daysAgo' : '14daysAgo';
|
237 |
+
$range_e_prev = false === empty( $th ) ? '31daysAgo' : '8daysAgo';
|
238 |
+
$reports_requests = array();
|
239 |
+
$reports_requests[] = array(
|
240 |
+
'viewId' => $id_view,
|
241 |
+
'dateRanges' => self::set_date_ranges( $range, 'yesterday', $range_s_prev, $range_e_prev ),
|
242 |
+
'metrics' => self::set_metrics(
|
243 |
+
array(
|
244 |
+
'ga:users',
|
245 |
+
'ga:pageviews',
|
246 |
+
'ga:pageviewsPerSession',
|
247 |
+
'ga:BounceRate',
|
248 |
+
)
|
249 |
+
),
|
250 |
+
'includeEmptyRows' => true,
|
251 |
+
'dimensions' => self::set_dimensions( 'ga:date' ),
|
252 |
+
);
|
253 |
+
$query = array(
|
254 |
+
'reportRequests' => $reports_requests,
|
255 |
+
);
|
256 |
+
|
257 |
+
return $query;
|
258 |
+
}
|
259 |
+
|
260 |
+
/**
|
261 |
+
* Preparing query for chart
|
262 |
+
*
|
263 |
+
* @param int $id_view The Analytics view ID from which to retrieve data.
|
264 |
+
* @param array $date_ranges An array representing the date ranges that will be passed to chart query.
|
265 |
+
* @param string $metric A metric expression.
|
266 |
+
*
|
267 |
+
* @return array Chart query
|
268 |
+
*/
|
269 |
+
public static function main_chart_query( $id_view, $date_ranges = null, $metric = null ) {
|
270 |
+
if ( true === empty( $metric ) ) {
|
271 |
+
$metric = 'ga:pageviews';
|
272 |
+
} else {
|
273 |
+
$metric = 'ga:' . $metric;
|
274 |
+
}
|
275 |
+
|
276 |
+
$reports_requests = array();
|
277 |
+
$reports_requests[] = array(
|
278 |
+
'viewId' => $id_view,
|
279 |
+
'dateRanges' => $date_ranges,
|
280 |
+
'metrics' => self::set_metrics( $metric ),
|
281 |
+
'includeEmptyRows' => true,
|
282 |
+
'dimensions' => self::set_dimensions( 'ga:date' ),
|
283 |
+
);
|
284 |
+
$query = array(
|
285 |
+
'reportRequests' => $reports_requests,
|
286 |
+
);
|
287 |
+
|
288 |
+
return $query;
|
289 |
+
}
|
290 |
+
|
291 |
+
/**
|
292 |
+
* Preparing query for chart
|
293 |
+
*
|
294 |
+
* @param int $id_view The Analytics view ID from which to retrieve data.
|
295 |
+
* @param string $date_range The start date for the query in the format YYYY-MM-DD or '7daysAgo'.
|
296 |
+
* @param string $metric A metric expression.
|
297 |
+
*
|
298 |
+
* @return array Chart query
|
299 |
+
* @deprecated
|
300 |
+
*/
|
301 |
+
public static function main_chart_query_old( $id_view, $date_range = null, $metric = null ) {
|
302 |
+
if ( empty( $date_range ) ) {
|
303 |
+
$date_ranges = self::set_date_ranges( '7daysAgo', 'yesterday', '14daysAgo', '8daysAgo' );
|
304 |
+
} else {
|
305 |
+
$date_ranges = self::set_date_ranges( $date_range, 'yesterday', '14daysAgo', '8daysAgo' );
|
306 |
+
}
|
307 |
+
|
308 |
+
if ( empty( $metric ) ) {
|
309 |
+
$metric = 'ga:pageviews';
|
310 |
+
} else {
|
311 |
+
$metric = 'ga:' . $metric;
|
312 |
+
}
|
313 |
+
|
314 |
+
$reports_requests = array();
|
315 |
+
$reports_requests[] = array(
|
316 |
+
'viewId' => $id_view,
|
317 |
+
'dateRanges' => $date_ranges,
|
318 |
+
'metrics' => self::set_metrics( $metric ),
|
319 |
+
'includeEmptyRows' => true,
|
320 |
+
'dimensions' => self::set_dimensions( 'ga:date' ),
|
321 |
+
);
|
322 |
+
$query = array(
|
323 |
+
'reportRequests' => $reports_requests,
|
324 |
+
);
|
325 |
+
|
326 |
+
return $query;
|
327 |
+
}
|
328 |
+
|
329 |
+
/**
|
330 |
+
* Preparing query for gender chart
|
331 |
+
*
|
332 |
+
* @param int $id_view The Analytics view ID from which to retrieve data.
|
333 |
+
* @param array $date_ranges An array representing the date ranges that will be passed to chart query.
|
334 |
+
* @param string $metric A metric expression.
|
335 |
+
*
|
336 |
+
* @return array Chart query
|
337 |
+
*/
|
338 |
+
public static function gender_chart_query( $id_view, $date_ranges = null, $metric = null ) {
|
339 |
+
if ( true === empty( $date_ranges ) ) {
|
340 |
+
$date_ranges = self::set_date_ranges( '7daysAgo', 'yesterday', '14daysAgo', '8daysAgo' );
|
341 |
+
}
|
342 |
+
|
343 |
+
$reports_requests = array();
|
344 |
+
$reports_requests[] = array(
|
345 |
+
'viewId' => $id_view,
|
346 |
+
'dateRanges' => $date_ranges,
|
347 |
+
'metrics' => self::set_metrics( 'ga:sessions' ),
|
348 |
+
'includeEmptyRows' => true,
|
349 |
+
'dimensions' => self::set_dimensions( 'ga:userGender' ),
|
350 |
+
);
|
351 |
+
$query = array(
|
352 |
+
'reportRequests' => $reports_requests,
|
353 |
+
);
|
354 |
+
|
355 |
+
return $query;
|
356 |
+
}
|
357 |
+
|
358 |
+
/**
|
359 |
+
* Preparing query for device chart.
|
360 |
+
*
|
361 |
+
* @param int $id_view The Analytics view ID from which to retrieve data.
|
362 |
+
* @param array $date_ranges An array representing the date ranges that will be passed to chart query.
|
363 |
+
* @param string $metric A metric expression.
|
364 |
+
*
|
365 |
+
* @return array Chart query
|
366 |
+
* @since 2.5.2
|
367 |
+
*/
|
368 |
+
public static function device_chart_query( $id_view, $date_ranges = null, $metric = null ) {
|
369 |
+
return array(
|
370 |
+
'reportRequests' => array(
|
371 |
+
array(
|
372 |
+
'viewId' => $id_view,
|
373 |
+
'dateRanges' => $date_ranges,
|
374 |
+
'metrics' => self::set_metrics( 'ga:sessions' ),
|
375 |
+
'includeEmptyRows' => true,
|
376 |
+
'dimensions' => self::set_dimensions( 'ga:deviceCategory' ),
|
377 |
+
),
|
378 |
+
),
|
379 |
+
);
|
380 |
+
}
|
381 |
+
|
382 |
+
/**
|
383 |
+
* Preparing query for age chart
|
384 |
+
*
|
385 |
+
* @param int $id_view The Analytics view ID from which to retrieve data.
|
386 |
+
* @param array $date_ranges An array representing the date ranges that will be passed to chart query.
|
387 |
+
* @param string $metric A metric expression.
|
388 |
+
*
|
389 |
+
* @return array Chart query
|
390 |
+
*/
|
391 |
+
public static function age_chart_query( $id_view, $date_ranges = null, $metric = null ) {
|
392 |
+
if ( true === empty( $date_ranges ) ) {
|
393 |
+
$date_ranges = self::set_date_ranges( '7daysAgo', 'yesterday', '14daysAgo', '8daysAgo' );
|
394 |
+
}
|
395 |
+
|
396 |
+
$reports_requests = array();
|
397 |
+
$reports_requests[] = array(
|
398 |
+
'viewId' => $id_view,
|
399 |
+
'dateRanges' => $date_ranges,
|
400 |
+
'metrics' => self::set_metrics( 'ga:sessions' ),
|
401 |
+
'includeEmptyRows' => true,
|
402 |
+
'dimensions' => self::set_dimensions( 'ga:userAgeBracket' ),
|
403 |
+
);
|
404 |
+
$query = array(
|
405 |
+
'reportRequests' => $reports_requests,
|
406 |
+
);
|
407 |
+
|
408 |
+
return $query;
|
409 |
+
}
|
410 |
+
|
411 |
+
/**
|
412 |
+
* Setting order for requests
|
413 |
+
*
|
414 |
+
* @param string $name The field which to sort by. The default sort order is ascending. Example: ga:browser.
|
415 |
+
* @param string $sort The sorting order for the field. 'ASCENDING' or 'DESCENDING'.
|
416 |
+
*
|
417 |
+
* @return array OrderBys
|
418 |
+
*/
|
419 |
+
public static function set_order_bys( $name, $sort ) {
|
420 |
+
$order = array();
|
421 |
+
$order[] = array(
|
422 |
+
'fieldName' => $name,
|
423 |
+
'sortOrder' => $sort,
|
424 |
+
);
|
425 |
+
|
426 |
+
return $order;
|
427 |
+
}
|
428 |
+
|
429 |
+
/**
|
430 |
+
* Setting metrics for requests
|
431 |
+
*
|
432 |
+
* @param mixed $expression A metric expression or array of expressions.
|
433 |
+
*
|
434 |
+
* @return array Metrics
|
435 |
+
*/
|
436 |
+
public static function set_metrics( $expression ) {
|
437 |
+
$metrics = array();
|
438 |
+
if ( is_array( $expression ) ) {
|
439 |
+
foreach ( $expression as $exp ) {
|
440 |
+
$metrics[] = array(
|
441 |
+
'expression' => $exp,
|
442 |
+
);
|
443 |
+
}
|
444 |
+
} else {
|
445 |
+
$metrics[] = array(
|
446 |
+
'expression' => $expression,
|
447 |
+
);
|
448 |
+
}
|
449 |
+
|
450 |
+
return $metrics;
|
451 |
+
}
|
452 |
+
|
453 |
+
/**
|
454 |
+
* Setting dimensions for requests
|
455 |
+
*
|
456 |
+
* @param string $name Name of the dimension to fetch, for example ga:browser.
|
457 |
+
*
|
458 |
+
* @return array Dimensions
|
459 |
+
*/
|
460 |
+
public static function set_dimensions( $name ) {
|
461 |
+
$dimensions = array();
|
462 |
+
$dimensions[] = array(
|
463 |
+
'name' => $name,
|
464 |
+
);
|
465 |
+
|
466 |
+
return $dimensions;
|
467 |
+
}
|
468 |
+
|
469 |
+
/**
|
470 |
+
* Setting date ranges for requests
|
471 |
+
*
|
472 |
+
* @param string $start_date The start date for the query in the format YYYY-MM-DD.
|
473 |
+
* @param string $end_date The end date for the query in the format YYYY-MM-DD.
|
474 |
+
* @param string $prev_start_date The start date (second range) for the query in the format YYYY-MM-DD.
|
475 |
+
* @param string $prev_end_date The start date (second range) for the query in the format YYYY-MM-DD.
|
476 |
+
*
|
477 |
+
* @return array Date ranges
|
478 |
+
*/
|
479 |
+
public static function set_date_ranges( $start_date, $end_date, $prev_start_date = '', $prev_end_date = '' ) {
|
480 |
+
$date_danges = array();
|
481 |
+
$date_danges[] = array(
|
482 |
+
'startDate' => $start_date,
|
483 |
+
'endDate' => $end_date,
|
484 |
+
);
|
485 |
+
if ( false === empty( $prev_start_date ) && false === empty( $prev_end_date ) ) {
|
486 |
+
$date_danges[] = array(
|
487 |
+
'startDate' => $prev_start_date,
|
488 |
+
'endDate' => $prev_end_date,
|
489 |
+
);
|
490 |
+
}
|
491 |
+
|
492 |
+
return $date_danges;
|
493 |
+
}
|
494 |
+
|
495 |
+
/**
|
496 |
+
* Preparing response for data received from analytics
|
497 |
+
*
|
498 |
+
* @param array $data Analytics response.
|
499 |
+
*
|
500 |
+
* @return array Response rows
|
501 |
+
*/
|
502 |
+
public static function prepare_response( $data ) {
|
503 |
+
$data = self::get_reports_from_response( $data );
|
504 |
+
self::handle_more_reports( $data );
|
505 |
+
$report = self::get_single_report( $data );
|
506 |
+
self::get_report_column_header( $report );
|
507 |
+
$report_data = self::get_report_data( $report );
|
508 |
+
self::get_totals( $report_data );
|
509 |
+
self::get_row_count( $report_data );
|
510 |
+
$rows = self::get_rows( $report_data );
|
511 |
+
|
512 |
+
return $rows;
|
513 |
+
}
|
514 |
+
|
515 |
+
/**
|
516 |
+
* Get dimensions from response row
|
517 |
+
*
|
518 |
+
* @param array $row Analytics response row.
|
519 |
+
*
|
520 |
+
* @return array|bool Dimensions
|
521 |
+
*/
|
522 |
+
public static function get_dimensions( $row ) {
|
523 |
+
if ( false === empty( $row['dimensions'] ) ) {
|
524 |
+
return $row['dimensions'];
|
525 |
+
}
|
526 |
+
|
527 |
+
return false;
|
528 |
+
}
|
529 |
+
|
530 |
+
/**
|
531 |
+
* Get metrics from response row
|
532 |
+
*
|
533 |
+
* @param array $row Analytics response row.
|
534 |
+
*
|
535 |
+
* @return array|bool Metrics
|
536 |
+
*/
|
537 |
+
public static function get_metrics( $row ) {
|
538 |
+
if ( false === empty( $row['metrics'] ) ) {
|
539 |
+
return $row['metrics'];
|
540 |
+
}
|
541 |
+
|
542 |
+
return false;
|
543 |
+
}
|
544 |
+
|
545 |
+
/**
|
546 |
+
* Get row from response report data
|
547 |
+
*
|
548 |
+
* @param array $report_data Analytics response report data.
|
549 |
+
*
|
550 |
+
* @return array|bool Rows
|
551 |
+
*/
|
552 |
+
public static function get_rows( $report_data ) {
|
553 |
+
if ( false === empty( $report_data['rows'] ) ) {
|
554 |
+
return $report_data['rows'];
|
555 |
+
}
|
556 |
+
|
557 |
+
return false;
|
558 |
+
}
|
559 |
+
|
560 |
+
/**
|
561 |
+
* Get row count from response report data
|
562 |
+
*
|
563 |
+
* @param array $report_data Analytics response report data.
|
564 |
+
*
|
565 |
+
* @return array|bool Row count
|
566 |
+
*/
|
567 |
+
public static function get_row_count( $report_data ) {
|
568 |
+
if ( false === empty( $report_data['rowCount'] ) ) {
|
569 |
+
return $report_data['rowCount'];
|
570 |
+
}
|
571 |
+
|
572 |
+
return false;
|
573 |
+
}
|
574 |
+
|
575 |
+
/**
|
576 |
+
* Get totals from response report data
|
577 |
+
*
|
578 |
+
* @param array $report_data Analytics response report data.
|
579 |
+
*
|
580 |
+
* @return array|bool Totals
|
581 |
+
*/
|
582 |
+
public static function get_totals( $report_data ) {
|
583 |
+
if ( false === empty( $report_data['totals'] ) ) {
|
584 |
+
return $report_data['totals'];
|
585 |
+
}
|
586 |
+
|
587 |
+
return false;
|
588 |
+
}
|
589 |
+
|
590 |
+
/**
|
591 |
+
* Get reports from response data
|
592 |
+
*
|
593 |
+
* @param array $data Analytics response data.
|
594 |
+
*
|
595 |
+
* @return array|bool Reports
|
596 |
+
*/
|
597 |
+
public static function get_reports_from_response( $data ) {
|
598 |
+
if ( false === empty( $data['reports'] ) ) {
|
599 |
+
return $data['reports'];
|
600 |
+
}
|
601 |
+
|
602 |
+
return false;
|
603 |
+
}
|
604 |
+
|
605 |
+
/**
|
606 |
+
* Show info for multiple data
|
607 |
+
*
|
608 |
+
* @param array $data Analytics response data.
|
609 |
+
*/
|
610 |
+
public static function handle_more_reports( $data ) {
|
611 |
+
if ( count( $data ) > 1 ) {
|
612 |
+
echo 'more than one report';
|
613 |
+
}
|
614 |
+
}
|
615 |
+
|
616 |
+
/**
|
617 |
+
* Show info for multiple rows
|
618 |
+
*
|
619 |
+
* @param array $rows Analytics response rows.
|
620 |
+
*/
|
621 |
+
public static function handle_more_rows( $rows ) {
|
622 |
+
if ( count( $rows ) > 1 ) {
|
623 |
+
echo 'more than one row';
|
624 |
+
}
|
625 |
+
}
|
626 |
+
|
627 |
+
/**
|
628 |
+
* Get single report from response data
|
629 |
+
*
|
630 |
+
* @param array $data Analytics response data.
|
631 |
+
*
|
632 |
+
* @return array|bool Report
|
633 |
+
*/
|
634 |
+
public static function get_single_report( $data ) {
|
635 |
+
if ( false === empty( $data ) ) {
|
636 |
+
foreach ( $data as $report ) {
|
637 |
+
if ( false === empty( $report ) ) {
|
638 |
+
return $report;
|
639 |
+
}
|
640 |
+
}
|
641 |
+
}
|
642 |
+
|
643 |
+
return false;
|
644 |
+
}
|
645 |
+
|
646 |
+
/**
|
647 |
+
* Get single row from response data rows
|
648 |
+
*
|
649 |
+
* @param array $rows Analytics response data rows.
|
650 |
+
*
|
651 |
+
* @return array|bool Row
|
652 |
+
*/
|
653 |
+
public static function get_single_row( $rows ) {
|
654 |
+
if ( false === empty( $rows ) ) {
|
655 |
+
foreach ( $rows as $row ) {
|
656 |
+
if ( false === empty( $row ) ) {
|
657 |
+
return $row;
|
658 |
+
}
|
659 |
+
}
|
660 |
+
}
|
661 |
+
|
662 |
+
return false;
|
663 |
+
}
|
664 |
+
|
665 |
+
/**
|
666 |
+
* Get column header from response data
|
667 |
+
*
|
668 |
+
* @param array $data Analytics response data.
|
669 |
+
*
|
670 |
+
* @return array Column header
|
671 |
+
*/
|
672 |
+
public static function get_report_column_header( $data ) {
|
673 |
+
if ( false === empty( $data['columnHeader'] ) ) {
|
674 |
+
return $data['columnHeader'];
|
675 |
+
}
|
676 |
+
|
677 |
+
return false;
|
678 |
+
}
|
679 |
+
|
680 |
+
/**
|
681 |
+
* Get report data from response data
|
682 |
+
*
|
683 |
+
* @param array $data Analytics response data.
|
684 |
+
*
|
685 |
+
* @return array|bool data
|
686 |
+
*/
|
687 |
+
public static function get_report_data( $data ) {
|
688 |
+
if ( false === empty( $data['data'] ) ) {
|
689 |
+
return $data['data'];
|
690 |
+
}
|
691 |
+
|
692 |
+
return false;
|
693 |
+
}
|
694 |
+
|
695 |
+
/**
|
696 |
+
* Get chart from response data
|
697 |
+
*
|
698 |
+
* @param array $response_data Analytics response data.
|
699 |
+
* @param int $period_in_days Period in days (default = 7).
|
700 |
+
*
|
701 |
+
* @return array chart data
|
702 |
+
*/
|
703 |
+
public static function get_chart( $response_data, $period_in_days = 7 ) {
|
704 |
+
$chart_data = array();
|
705 |
+
if ( false === empty( $response_data ) ) {
|
706 |
+
$data = (
|
707 |
+
false === empty( $response_data['reports'] )
|
708 |
+
&& false === empty( $response_data['reports'][0] )
|
709 |
+
&& false === empty( $response_data['reports'][0]['data'] )
|
710 |
+
)
|
711 |
+
? $response_data['reports'][0]['data'] : array();
|
712 |
+
$rows = ( false === empty( $data['rows'] ) ) ? $data['rows'] : array();
|
713 |
+
if ( false === empty( $rows ) ) {
|
714 |
+
foreach ( $rows as $key => $row ) {
|
715 |
+
if ( $key < $period_in_days ) {
|
716 |
+
$chart_data[ $key ]['previous'] = false === empty( $row['metrics'][1]['values'][0] ) ? $row['metrics'][1]['values'][0] : 0;
|
717 |
+
$chart_data[ $key ]['previous-day'] = gmdate( 'M j', strtotime( $row['dimensions'][0] ) );
|
718 |
+
} else {
|
719 |
+
$chart_data[ $key - $period_in_days ]['day'] = gmdate( 'M j', strtotime( $row['dimensions'][0] ) );
|
720 |
+
$chart_data[ $key - $period_in_days ]['current'] = false === empty( $row['metrics'][0]['values'][0] ) ? $row['metrics'][0]['values'][0] : 0;
|
721 |
+
$chart_data['date'] = strtotime( $row['dimensions'][0] );
|
722 |
+
}
|
723 |
+
}
|
724 |
+
}
|
725 |
+
}
|
726 |
+
|
727 |
+
return $chart_data;
|
728 |
+
}
|
729 |
+
|
730 |
+
/**
|
731 |
+
* Get gender chart from response data
|
732 |
+
*
|
733 |
+
* @param array $response_data Analytics response data.
|
734 |
+
*
|
735 |
+
* @return array chart data
|
736 |
+
*/
|
737 |
+
public static function get_gender_chart( $response_data ) {
|
738 |
+
$chart_data = array();
|
739 |
+
if ( false === empty( $response_data ) ) {
|
740 |
+
$data = ( false === empty( $response_data['reports'] ) && false === empty( $response_data['reports'][0] ) && false === empty( $response_data['reports'][0]['data'] ) ) ? $response_data['reports'][0]['data'] : array();
|
741 |
+
$rows = ( false === empty( $data['rows'] ) ) ? $data['rows'] : array();
|
742 |
+
if ( false === empty( $rows ) ) {
|
743 |
+
foreach ( $rows as $key => $row ) {
|
744 |
+
$chart_data[ $row['dimensions'][0] ] = self::get_metric_value( $row['metrics'] );
|
745 |
+
}
|
746 |
+
}
|
747 |
+
}
|
748 |
+
|
749 |
+
return $chart_data;
|
750 |
+
}
|
751 |
+
|
752 |
+
/**
|
753 |
+
* Get device chart from response data.
|
754 |
+
*
|
755 |
+
* @param array $response_data Analytics response data array.
|
756 |
+
*
|
757 |
+
* @return array Chart data array.
|
758 |
+
*/
|
759 |
+
public static function get_device_chart( $response_data ) {
|
760 |
+
$chart_data = array();
|
761 |
+
if ( false === empty( $response_data ) ) {
|
762 |
+
$data = ( false === empty( $response_data['reports'] ) && false === empty( $response_data['reports'][0] ) && false === empty( $response_data['reports'][0]['data'] ) ) ? $response_data['reports'][0]['data'] : array();
|
763 |
+
$rows = ( false === empty( $data['rows'] ) ) ? $data['rows'] : array();
|
764 |
+
if ( false === empty( $rows ) ) {
|
765 |
+
foreach ( $rows as $row ) {
|
766 |
+
$chart_data[ $row['dimensions'][0] ] = self::get_metric_value( $row['metrics'] );
|
767 |
+
}
|
768 |
+
}
|
769 |
+
}
|
770 |
+
|
771 |
+
return $chart_data;
|
772 |
+
}
|
773 |
+
|
774 |
+
/**
|
775 |
+
* Get the value of metric data response.
|
776 |
+
*
|
777 |
+
* @param array $metrics Metrics array.
|
778 |
+
*
|
779 |
+
* @return mixed
|
780 |
+
*/
|
781 |
+
private static function get_metric_value( $metrics ) {
|
782 |
+
if ( is_array( $metrics ) ) {
|
783 |
+
foreach ( $metrics as $metric ) {
|
784 |
+
$values[] = $metric['values'][0];
|
785 |
+
}
|
786 |
+
}
|
787 |
+
|
788 |
+
return $values[0];
|
789 |
+
}
|
790 |
+
|
791 |
+
/**
|
792 |
+
* Get gender chart from response data
|
793 |
+
*
|
794 |
+
* @param array $response_data Analytics response data.
|
795 |
+
*
|
796 |
+
* @return array chart data
|
797 |
+
*/
|
798 |
+
public static function get_age_chart( $response_data ) {
|
799 |
+
$chart_data = array();
|
800 |
+
if ( false === empty( $response_data ) ) {
|
801 |
+
$data = ( false === empty( $response_data['reports'] ) && false === empty( $response_data['reports'][0] ) && false === empty( $response_data['reports'][0]['data'] ) ) ? $response_data['reports'][0]['data'] : array();
|
802 |
+
$rows = ( false === empty( $data['rows'] ) ) ? $data['rows'] : array();
|
803 |
+
if ( false === empty( $rows ) ) {
|
804 |
+
foreach ( $rows as $key => $row ) {
|
805 |
+
$chart_data[ $row['dimensions'][0] ] = self::get_metric_value( $row['metrics'] );
|
806 |
+
}
|
807 |
+
}
|
808 |
+
}
|
809 |
+
|
810 |
+
return $chart_data;
|
811 |
+
}
|
812 |
+
|
813 |
+
/**
|
814 |
+
* Get dasboard chart from response data
|
815 |
+
*
|
816 |
+
* @param array $response_data Analytics response data.
|
817 |
+
*
|
818 |
+
* @return array dashboard chart data
|
819 |
+
*/
|
820 |
+
public static function get_dashboard_chart( $response_data ) {
|
821 |
+
$chart_data = array();
|
822 |
+
if ( false === empty( $response_data ) ) {
|
823 |
+
$data = (
|
824 |
+
false === empty( $response_data['reports'] )
|
825 |
+
&& false === empty( $response_data['reports'][0] )
|
826 |
+
&& false === empty( $response_data['reports'][0]['data'] )
|
827 |
+
) ? $response_data['reports'][0]['data'] : array();
|
828 |
+
|
829 |
+
$rows = ( false === empty( $data['rows'] ) ) ? $data['rows'] : array();
|
830 |
+
if ( false === empty( $rows ) ) {
|
831 |
+
foreach ( $rows as $row ) {
|
832 |
+
$chart_data[] = array(
|
833 |
+
'day' => gmdate( 'M j', strtotime( $row['dimensions'][0] ) ),
|
834 |
+
'current' => false === empty( $row['metrics'][0]['values'][0] ) ? $row['metrics'][0]['values'][0] : 0,
|
835 |
+
);
|
836 |
+
}
|
837 |
+
}
|
838 |
+
}
|
839 |
+
|
840 |
+
return $chart_data;
|
841 |
+
}
|
842 |
+
|
843 |
+
/**
|
844 |
+
* Get boxes from response data
|
845 |
+
*
|
846 |
+
* @param array $data Analytics response data.
|
847 |
+
*
|
848 |
+
* @return array boxes data
|
849 |
+
*/
|
850 |
+
public static function get_boxes( $data ) {
|
851 |
+
if ( false === empty( $data ) ) {
|
852 |
+
$data = self::get_reports_from_response( $data );
|
853 |
+
self::handle_more_reports( $data );
|
854 |
+
$report = self::get_single_report( $data );
|
855 |
+
self::get_report_column_header( $report );
|
856 |
+
$report_data = self::get_report_data( $report );
|
857 |
+
$totals = self::get_totals( $report_data );
|
858 |
+
|
859 |
+
return self::get_boxes_from_totals( $totals );
|
860 |
+
}
|
861 |
+
}
|
862 |
+
|
863 |
+
/**
|
864 |
+
* Get boxes from totals
|
865 |
+
*
|
866 |
+
* @param array $totals Analytics response totals.
|
867 |
+
*
|
868 |
+
* @return array|bool boxes data
|
869 |
+
*/
|
870 |
+
public static function get_boxes_from_totals( $totals ) {
|
871 |
+
if ( false === empty( $totals ) ) {
|
872 |
+
$boxes_data = array();
|
873 |
+
foreach ( $totals as $key => $total ) {
|
874 |
+
if ( 0 === $key ) {
|
875 |
+
$boxes_data['Users']['current'] = $total['values'][0];
|
876 |
+
$boxes_data['Pageviews']['current'] = $total['values'][1];
|
877 |
+
$boxes_data['PageviewsPerSession']['current'] = $total['values'][2];
|
878 |
+
$boxes_data['BounceRate']['current'] = round( $total['values'][3], 2 );
|
879 |
+
} else {
|
880 |
+
$boxes_data['Users']['previous'] = $total['values'][0];
|
881 |
+
$boxes_data['Pageviews']['previous'] = $total['values'][1];
|
882 |
+
$boxes_data['PageviewsPerSession']['previous'] = $total['values'][2];
|
883 |
+
$boxes_data['BounceRate']['previous'] = round( $total['values'][3], 2 );
|
884 |
+
}
|
885 |
+
}
|
886 |
+
|
887 |
+
return self::prepare_boxes( $boxes_data );
|
888 |
+
}
|
889 |
+
|
890 |
+
return false;
|
891 |
+
}
|
892 |
+
|
893 |
+
/**
|
894 |
+
* Prepare boxes data
|
895 |
+
*
|
896 |
+
* @param array $boxes_data Boxes data.
|
897 |
+
*
|
898 |
+
* @return array boxes data
|
899 |
+
*/
|
900 |
+
public static function prepare_boxes( $boxes_data ) {
|
901 |
+
$boxes_data['Users']['diff'] = ( $boxes_data['Users']['previous'] > 0 ) ? round( ( $boxes_data['Users']['current'] - $boxes_data['Users']['previous'] ) / $boxes_data['Users']['previous'] * 100, 2 ) : 100;
|
902 |
+
$boxes_data['Pageviews']['diff'] = ( $boxes_data['Pageviews']['previous'] > 0 ) ? round( ( $boxes_data['Pageviews']['current'] - $boxes_data['Pageviews']['previous'] ) / $boxes_data['Pageviews']['previous'] * 100, 2 ) : 100;
|
903 |
+
$boxes_data['PageviewsPerSession']['diff'] = ( $boxes_data['PageviewsPerSession']['previous'] > 0 ) ? round( ( $boxes_data['PageviewsPerSession']['current'] - $boxes_data['PageviewsPerSession']['previous'] ) / $boxes_data['PageviewsPerSession']['previous'] * 100, 2 ) : 100;
|
904 |
+
$boxes_data['BounceRate']['diff'] = ( $boxes_data['BounceRate']['previous'] > 0 ) ? round( ( $boxes_data['BounceRate']['current'] - $boxes_data['BounceRate']['previous'] ) / $boxes_data['BounceRate']['previous'] * 100, 2 ) : 100;
|
905 |
+
$boxes_data['Users']['diff'] = ( 0 === $boxes_data['Users']['previous'] && 0 === $boxes_data['Users']['current'] ) ? 0 : $boxes_data['Users']['diff'];
|
906 |
+
$boxes_data['Pageviews']['diff'] = ( 0 === $boxes_data['Pageviews']['previous'] && 0 === $boxes_data['Pageviews']['current'] ) ? 0 : $boxes_data['Pageviews']['diff'];
|
907 |
+
$boxes_data['PageviewsPerSession']['diff'] = ( 0 === $boxes_data['PageviewsPerSession']['previous'] && 0 === $boxes_data['PageviewsPerSession']['current'] ) ? 0 : $boxes_data['PageviewsPerSession']['diff'];
|
908 |
+
$boxes_data['BounceRate']['diff'] = ( 0 === $boxes_data['BounceRate']['previous'] && 0 === $boxes_data['BounceRate']['current'] ) ? 0 : $boxes_data['BounceRate']['diff'];
|
909 |
+
$boxes_data['Users']['label'] = 'Users';
|
910 |
+
$boxes_data['Pageviews']['label'] = 'Pageviews';
|
911 |
+
$boxes_data['PageviewsPerSession']['label'] = 'Pages / Session';
|
912 |
+
$boxes_data['BounceRate']['label'] = 'Bounce Rate';
|
913 |
+
$boxes_data['Users']['comparison'] = $boxes_data['Users']['current'] . ' vs ' . $boxes_data['Users']['previous'];
|
914 |
+
$boxes_data['Pageviews']['comparison'] = $boxes_data['Pageviews']['current'] . ' vs ' . $boxes_data['Pageviews']['previous'];
|
915 |
+
$boxes_data['PageviewsPerSession']['comparison'] = self::number_format_clean( $boxes_data['PageviewsPerSession']['current'], 2, '.', ',' ) . ' vs ' . self::number_format_clean( $boxes_data['PageviewsPerSession']['previous'], 2, '.', ',' );
|
916 |
+
$boxes_data['BounceRate']['comparison'] = self::number_format_clean( $boxes_data['BounceRate']['current'], 2, '.', ',' ) . '% vs ' . self::number_format_clean( $boxes_data['BounceRate']['previous'], 2, '.', ',' ) . '%';
|
917 |
+
$boxes_data['Users']['color'] = ( $boxes_data['Users']['diff'] > 0 ) ? 'green' : 'red';
|
918 |
+
$boxes_data['Pageviews']['color'] = ( $boxes_data['Pageviews']['diff'] > 0 ) ? 'green' : 'red';
|
919 |
+
$boxes_data['PageviewsPerSession']['color'] = ( $boxes_data['PageviewsPerSession']['diff'] > 0 ) ? 'green' : 'red';
|
920 |
+
$boxes_data['BounceRate']['color'] = ( $boxes_data['BounceRate']['diff'] > 0 ) ? 'red' : 'green';
|
921 |
+
$boxes_data['Users']['color'] = ( 0 !== $boxes_data['Users']['diff'] ) ? $boxes_data['Users']['color'] : 'black';
|
922 |
+
$boxes_data['Pageviews']['color'] = ( 0 !== $boxes_data['Pageviews']['diff'] ) ? $boxes_data['Pageviews']['color'] : 'black';
|
923 |
+
$boxes_data['PageviewsPerSession']['color'] = ( 0 !== $boxes_data['PageviewsPerSession']['diff'] ) ? $boxes_data['PageviewsPerSession']['color'] : 'black';
|
924 |
+
$boxes_data['BounceRate']['color'] = ( 0 !== $boxes_data['BounceRate']['diff'] ) ? $boxes_data['BounceRate']['color'] : 'black';
|
925 |
+
|
926 |
+
return $boxes_data;
|
927 |
+
}
|
928 |
+
|
929 |
+
/**
|
930 |
+
* Number format for boxes
|
931 |
+
*
|
932 |
+
* @param float $number Number to format.
|
933 |
+
* @param int $precision Precision.
|
934 |
+
* @param string $dec_point Decimal point.
|
935 |
+
* @param string $thousands_sep Thousands Separator.
|
936 |
+
*
|
937 |
+
* @return string clean number format
|
938 |
+
*/
|
939 |
+
public static function number_format_clean( $number, $precision = 0, $dec_point = '.', $thousands_sep = ',' ) {
|
940 |
+
if ( 0 === $number ) {
|
941 |
+
return 0;
|
942 |
+
} else {
|
943 |
+
$format = number_format( $number, $precision, $dec_point, $thousands_sep );
|
944 |
+
if ( '.00' === substr( $format, 2 ) ) {
|
945 |
+
return substr( $format, 0, - 3 );
|
946 |
+
}
|
947 |
+
|
948 |
+
return $format;
|
949 |
+
}
|
950 |
+
}
|
951 |
+
|
952 |
+
/**
|
953 |
+
* Get sources from analytics response data
|
954 |
+
*
|
955 |
+
* @param array $data Analytics response data.
|
956 |
+
*
|
957 |
+
* @return array|bool sources data
|
958 |
+
*/
|
959 |
+
public static function get_sources( $data ) {
|
960 |
+
if ( false === empty( $data ) ) {
|
961 |
+
$data = self::get_reports_from_response( $data );
|
962 |
+
self::handle_more_reports( $data );
|
963 |
+
$report = self::get_single_report( $data );
|
964 |
+
self::get_report_column_header( $report );
|
965 |
+
$report_data = self::get_report_data( $report );
|
966 |
+
$rows = self::get_rows( $report_data );
|
967 |
+
$totals = self::get_totals( $report_data );
|
968 |
+
$total_count = array();
|
969 |
+
if ( false === empty( $totals ) ) {
|
970 |
+
foreach ( $totals as $key => $total ) {
|
971 |
+
$total_count = $total['values'][0];
|
972 |
+
}
|
973 |
+
}
|
974 |
+
$sources = array(
|
975 |
+
'total' => $total_count,
|
976 |
+
'sum' => 0,
|
977 |
+
'rows' => array(),
|
978 |
+
);
|
979 |
+
if ( false === empty( $rows ) ) {
|
980 |
+
$i = 1;
|
981 |
+
foreach ( $rows as $row ) {
|
982 |
+
if ( false === empty( $row ) ) {
|
983 |
+
foreach ( $row as $key => $value ) {
|
984 |
+
if ( 'dimensions' === $key ) {
|
985 |
+
$sources['rows'][ $i ]['name'] = $value[0];
|
986 |
+
$sources['rows'][ $i ]['url'] = $value[0];
|
987 |
+
} elseif ( 'metrics' === $key ) {
|
988 |
+
$sources['rows'][ $i ]['number'] = $value[0]['values'][0];
|
989 |
+
$sources['rows'][ $i ]['percent'] = ( false === empty( $total_count ) ) ? round( $value[0]['values'][0] / $total_count * 100, 2 ) : 0;
|
990 |
+
$sources['sum'] += $value[0]['values'][0];
|
991 |
+
}
|
992 |
+
}
|
993 |
+
$i ++;
|
994 |
+
}
|
995 |
+
}
|
996 |
+
}
|
997 |
+
|
998 |
+
return $sources;
|
999 |
+
}
|
1000 |
+
|
1001 |
+
return false;
|
1002 |
+
}
|
1003 |
+
|
1004 |
+
/**
|
1005 |
+
* Get dashboard boxes data from analytics response data
|
1006 |
+
*
|
1007 |
+
* @param array $data Analytics response data.
|
1008 |
+
*
|
1009 |
+
* @return array dashboard boxes data
|
1010 |
+
*/
|
1011 |
+
public static function get_dashboard_boxes_data( $data ) {
|
1012 |
+
if ( false === empty( $data ) ) {
|
1013 |
+
$data = self::get_reports_from_response( $data );
|
1014 |
+
self::handle_more_reports( $data );
|
1015 |
+
$report = self::get_single_report( $data );
|
1016 |
+
self::get_report_column_header( $report );
|
1017 |
+
$report_data = self::get_report_data( $report );
|
1018 |
+
$totals = self::get_totals( $report_data );
|
1019 |
+
$boxes_data = array();
|
1020 |
+
$boxes_data['Sessions'] = array(
|
1021 |
+
'label' => 'Visits',
|
1022 |
+
'value' => $totals[0]['values'][0],
|
1023 |
+
);
|
1024 |
+
$boxes_data['Pageviews'] = array(
|
1025 |
+
'label' => 'Pageviews',
|
1026 |
+
'value' => $totals[0]['values'][1],
|
1027 |
+
);
|
1028 |
+
$boxes_data['pageviewsPerSession'] = array(
|
1029 |
+
'label' => 'Pages / Visit',
|
1030 |
+
'value' => self::number_format_clean( $totals[0]['values'][2], 2, '.', ',' ),
|
1031 |
+
);
|
1032 |
+
$boxes_data['BounceRate'] = array(
|
1033 |
+
'label' => 'Bounce Rate',
|
1034 |
+
'value' => self::number_format_clean( $totals[0]['values'][3], 2, '.', ',' ) . '%',
|
1035 |
+
);
|
1036 |
+
$boxes_data['avgTimeOnPage'] = array(
|
1037 |
+
'label' => 'Avg. Time on Site',
|
1038 |
+
'value' => gmdate( 'H:i:s', $totals[0]['values'][4] ),
|
1039 |
+
);
|
1040 |
+
$boxes_data['percentNewSessions'] = array(
|
1041 |
+
'label' => '% of New Visits',
|
1042 |
+
'value' => self::number_format_clean( $totals[0]['values'][5], 2, '.', ',' ),
|
1043 |
+
);
|
1044 |
+
|
1045 |
+
return $boxes_data;
|
1046 |
+
}
|
1047 |
+
}
|
1048 |
+
|
1049 |
+
/**
|
1050 |
+
* Get Empty Boxes Structure.
|
1051 |
+
*
|
1052 |
+
* @return array Array of empty boxes structure values.
|
1053 |
+
*/
|
1054 |
+
public static function get_empty_boxes_structure() {
|
1055 |
+
$boxes_data = array();
|
1056 |
+
$boxes_data['Sessions'] = array(
|
1057 |
+
'label' => 'Visits',
|
1058 |
+
'value' => 0,
|
1059 |
+
);
|
1060 |
+
$boxes_data['Pageviews'] = array(
|
1061 |
+
'label' => 'Pageviews',
|
1062 |
+
'value' => 0,
|
1063 |
+
);
|
1064 |
+
$boxes_data['pageviewsPerSession'] = array(
|
1065 |
+
'label' => 'Pages / Visit',
|
1066 |
+
'value' => self::number_format_clean( 0, 2, '.', ',' ),
|
1067 |
+
);
|
1068 |
+
$boxes_data['BounceRate'] = array(
|
1069 |
+
'label' => 'Bounce Rate',
|
1070 |
+
'value' => self::number_format_clean( 0, 2, '.', ',' ) . '%',
|
1071 |
+
);
|
1072 |
+
$boxes_data['avgTimeOnPage'] = array(
|
1073 |
+
'label' => 'Avg. Time on Site',
|
1074 |
+
'value' => gmdate( 'H:i:s', 0 ),
|
1075 |
+
);
|
1076 |
+
$boxes_data['percentNewSessions'] = array(
|
1077 |
+
'label' => '% of New Visits',
|
1078 |
+
'value' => self::number_format_clean( 0, 2, '.', ',' ),
|
1079 |
+
);
|
1080 |
+
|
1081 |
+
return $boxes_data;
|
1082 |
+
}
|
1083 |
+
}
|
class/class-ga-template.php
ADDED
@@ -0,0 +1,82 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Google Analytics template.
|
4 |
+
*
|
5 |
+
* @package GoogleAnalytics
|
6 |
+
*/
|
7 |
+
|
8 |
+
/**
|
9 |
+
* Class Ga_Template
|
10 |
+
*/
|
11 |
+
class Ga_Template {
|
12 |
+
/**
|
13 |
+
* Array of template properties.
|
14 |
+
*
|
15 |
+
* @var array Props array.
|
16 |
+
*/
|
17 |
+
protected $props;
|
18 |
+
|
19 |
+
/**
|
20 |
+
* Relative path in view/ folder.
|
21 |
+
*
|
22 |
+
* @var string Path string.
|
23 |
+
*/
|
24 |
+
protected $path;
|
25 |
+
|
26 |
+
/**
|
27 |
+
* Ga_Template constructor.
|
28 |
+
*
|
29 |
+
* @param string $path Relative path in view/ folder.
|
30 |
+
* @param array $props Array of props to be passed to the template.
|
31 |
+
*/
|
32 |
+
public function __construct( $path, $props = array() ) {
|
33 |
+
$this->path = $path;
|
34 |
+
$this->props = $props;
|
35 |
+
}
|
36 |
+
|
37 |
+
/**
|
38 |
+
* Include rendered template inline.
|
39 |
+
*
|
40 |
+
* @param string $path Relative path in view/ folder.
|
41 |
+
* @param array $props Array of props to be passed to the template.
|
42 |
+
*/
|
43 |
+
public static function load( $path, $props = array() ) {
|
44 |
+
( new static( $path, $props ) )->include_template();
|
45 |
+
}
|
46 |
+
|
47 |
+
/**
|
48 |
+
* Get rendered template.
|
49 |
+
*
|
50 |
+
* @param string $path Relative path in view/ folder.
|
51 |
+
* @param array $props Array of props to be passed to the template.
|
52 |
+
*
|
53 |
+
* @return string Rendered template.
|
54 |
+
*/
|
55 |
+
public static function render( $path, $props = array() ) {
|
56 |
+
return ( new static( $path, $props ) )->render_template();
|
57 |
+
}
|
58 |
+
|
59 |
+
/**
|
60 |
+
* Include template.
|
61 |
+
*/
|
62 |
+
public function include_template() {
|
63 |
+
$template_path = GA_PLUGIN_DIR . '/view/' . $this->path . '.php';
|
64 |
+
|
65 |
+
if ( is_readable( $template_path ) ) {
|
66 |
+
load_template( $template_path, false, $this->props );
|
67 |
+
}
|
68 |
+
}
|
69 |
+
|
70 |
+
/**
|
71 |
+
* Get rendered template.
|
72 |
+
*
|
73 |
+
* @return string
|
74 |
+
*/
|
75 |
+
public function render_template() {
|
76 |
+
ob_start();
|
77 |
+
$this->include_template();
|
78 |
+
$render = ob_get_contents();
|
79 |
+
|
80 |
+
return false === empty( $render ) ? $render : '';
|
81 |
+
}
|
82 |
+
}
|
class/controller/Ga_Admin_Controller.php
DELETED
@@ -1,113 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
/**
|
4 |
-
* Manages actions in the admin area.
|
5 |
-
*
|
6 |
-
* Created by PhpStorm.
|
7 |
-
* User: mdn
|
8 |
-
* Date: 2017-01-25
|
9 |
-
* Time: 09:50
|
10 |
-
*/
|
11 |
-
class Ga_Admin_Controller extends Ga_Controller_Core {
|
12 |
-
|
13 |
-
const ACTION_SHARETHIS_INVITE = 'ga_action_sharethis_invite';
|
14 |
-
|
15 |
-
/**
|
16 |
-
* Redirects to Google oauth authentication endpoint.
|
17 |
-
*/
|
18 |
-
public static function ga_action_auth() {
|
19 |
-
header( 'Location:' . Ga_Admin::api_client()->create_auth_url() );
|
20 |
-
}
|
21 |
-
|
22 |
-
/**
|
23 |
-
* Handle Sharethis invite action
|
24 |
-
*/
|
25 |
-
public static function ga_action_sharethis_invite() {
|
26 |
-
|
27 |
-
if ( self::verify_nonce( self::ACTION_SHARETHIS_INVITE ) ) {
|
28 |
-
$email = !empty( $_POST[ 'sharethis_invite_email' ] ) ? $_POST[ 'sharethis_invite_email' ] : null;
|
29 |
-
$response = null;
|
30 |
-
if ( !empty( $email ) ) {
|
31 |
-
$data = array(
|
32 |
-
'id' => get_option( Ga_Admin::GA_SHARETHIS_PROPERTY_ID ),
|
33 |
-
'secret' => get_option( Ga_Admin::GA_SHARETHIS_PROPERTY_SECRET ),
|
34 |
-
'product' => 'viral-notifications',
|
35 |
-
'role' => 'admin', // array_shift(Ga_Helper::get_user_roles())
|
36 |
-
'email' => $email
|
37 |
-
);
|
38 |
-
|
39 |
-
$response = Ga_Admin::api_client( Ga_Admin::GA_SHARETHIS_API_ALIAS )->call( 'ga_api_sharethis_user_invite', array( $data ) );
|
40 |
-
$errors = Ga_Admin::api_client( Ga_Admin::GA_SHARETHIS_API_ALIAS )->get_errors();
|
41 |
-
|
42 |
-
if ( !empty( $errors ) ) {
|
43 |
-
$msg = '';
|
44 |
-
foreach ( $errors as $error ) {
|
45 |
-
$msg .= $error[ 'message' ];
|
46 |
-
}
|
47 |
-
$msg = Ga_Helper::create_url_msg( $msg, Ga_Admin::NOTICE_ERROR );
|
48 |
-
} else {
|
49 |
-
$msg = Ga_Helper::create_url_msg( _( 'An invite was sent to this email' ), Ga_Admin::NOTICE_SUCCESS );
|
50 |
-
}
|
51 |
-
}
|
52 |
-
} else {
|
53 |
-
$msg = Ga_Helper::create_url_msg( _( 'Invalid request.' ), Ga_Admin::NOTICE_ERROR );
|
54 |
-
}
|
55 |
-
}
|
56 |
-
|
57 |
-
/**
|
58 |
-
* Sets accept terms option to TRUE.
|
59 |
-
*/
|
60 |
-
public static function ga_action_update_terms() {
|
61 |
-
update_option( Ga_Admin::GA_SHARETHIS_TERMS_OPTION_NAME, true );
|
62 |
-
|
63 |
-
wp_redirect( admin_url( Ga_Helper::GA_SETTINGS_PAGE_URL ) );
|
64 |
-
}
|
65 |
-
|
66 |
-
/**
|
67 |
-
* Enables all features option.
|
68 |
-
*/
|
69 |
-
public static function ga_action_enable_all_features() {
|
70 |
-
Ga_Helper::update_option( Ga_Admin::GA_DISABLE_ALL_FEATURES, false );
|
71 |
-
|
72 |
-
$url = !empty( $_GET[ 'page' ] ) ? Ga_Helper::create_url( admin_url( 'admin.php' ), array( 'page' => $_GET[ 'page' ] ) ) : admin_url( Ga_Helper::create_url( Ga_Helper::GA_SETTINGS_PAGE_URL ) );
|
73 |
-
|
74 |
-
wp_redirect( $url );
|
75 |
-
}
|
76 |
-
|
77 |
-
/**
|
78 |
-
* Disables all features option.
|
79 |
-
*/
|
80 |
-
public static function ga_action_disable_all_features() {
|
81 |
-
Ga_Helper::update_option( Ga_Admin::GA_DISABLE_ALL_FEATURES, true );
|
82 |
-
|
83 |
-
$url = !empty( $_GET[ 'page' ] ) ? Ga_Helper::create_url( admin_url( 'admin.php' ), array( 'page' => $_GET[ 'page' ] ) ) : admin_url( Ga_Helper::create_url( Ga_Helper::GA_SETTINGS_PAGE_URL ) );
|
84 |
-
|
85 |
-
wp_redirect( $url );
|
86 |
-
}
|
87 |
-
|
88 |
-
public static function validate_ajax_data_change_post( $post ) {
|
89 |
-
$error = 0;
|
90 |
-
|
91 |
-
if ( self::verify_nonce( 'ga_ajax_data_change' ) ) {
|
92 |
-
if ( !empty( $post[ 'date_range' ] ) ) {
|
93 |
-
if ( !is_string( $post[ 'date_range' ] ) ) {
|
94 |
-
$error ++;
|
95 |
-
}
|
96 |
-
} else {
|
97 |
-
$error ++;
|
98 |
-
}
|
99 |
-
|
100 |
-
if ( !empty( $post[ 'metric' ] ) ) {
|
101 |
-
if ( !is_string( $post[ 'metric' ] ) ) {
|
102 |
-
$error ++;
|
103 |
-
}
|
104 |
-
} else {
|
105 |
-
$error ++;
|
106 |
-
}
|
107 |
-
} else {
|
108 |
-
$error ++;
|
109 |
-
}
|
110 |
-
|
111 |
-
return $error == 0;
|
112 |
-
}
|
113 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class/controller/class-ga-admin-controller.php
ADDED
@@ -0,0 +1,139 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Google Analytics admin controller.
|
4 |
+
*
|
5 |
+
* @package GoogleAnalytics
|
6 |
+
*/
|
7 |
+
|
8 |
+
/**
|
9 |
+
* Admin controller.
|
10 |
+
*/
|
11 |
+
class Ga_Admin_Controller extends Ga_Controller_Core {
|
12 |
+
|
13 |
+
const ACTION_SHARETHIS_INVITE = 'ga_action_sharethis_invite';
|
14 |
+
|
15 |
+
/**
|
16 |
+
* Redirects to Google oauth authentication endpoint.
|
17 |
+
*/
|
18 |
+
public static function ga_action_auth() {
|
19 |
+
header( 'Location:' . Ga_Admin::api_client()->create_auth_url() );
|
20 |
+
}
|
21 |
+
|
22 |
+
/**
|
23 |
+
* Handle Sharethis invite action
|
24 |
+
*/
|
25 |
+
public static function ga_action_sharethis_invite() {
|
26 |
+
if ( true === self::verify_nonce( self::ACTION_SHARETHIS_INVITE ) ) {
|
27 |
+
// Validate email.
|
28 |
+
$email = filter_input( INPUT_POST, 'sharethis_invite_email', FILTER_SANITIZE_EMAIL );
|
29 |
+
|
30 |
+
if ( false === empty( $email ) ) {
|
31 |
+
$data = array(
|
32 |
+
'id' => get_option( Ga_Admin::GA_SHARETHIS_PROPERTY_ID ),
|
33 |
+
'secret' => get_option( Ga_Admin::GA_SHARETHIS_PROPERTY_SECRET ),
|
34 |
+
'product' => 'viral-notifications',
|
35 |
+
'role' => 'admin',
|
36 |
+
'email' => $email,
|
37 |
+
);
|
38 |
+
|
39 |
+
Ga_Admin::api_client( Ga_Admin::GA_SHARETHIS_API_ALIAS )
|
40 |
+
->call( 'ga_api_sharethis_user_invite', array( $data ) );
|
41 |
+
|
42 |
+
$errors = Ga_Admin::api_client( Ga_Admin::GA_SHARETHIS_API_ALIAS )->get_errors();
|
43 |
+
|
44 |
+
if ( false === empty( $errors ) ) {
|
45 |
+
$msg = '';
|
46 |
+
foreach ( $errors as $error ) {
|
47 |
+
$msg .= $error['message'];
|
48 |
+
}
|
49 |
+
$msg = Ga_Helper::create_url_msg( $msg, Ga_Admin::NOTICE_ERROR );
|
50 |
+
} else {
|
51 |
+
$msg = Ga_Helper::create_url_msg(
|
52 |
+
__( 'An invite was sent to this email' ),
|
53 |
+
Ga_Admin::NOTICE_SUCCESS
|
54 |
+
);
|
55 |
+
}
|
56 |
+
}
|
57 |
+
} else {
|
58 |
+
$msg = Ga_Helper::create_url_msg(
|
59 |
+
__( 'Invalid request.' ),
|
60 |
+
Ga_Admin::NOTICE_ERROR
|
61 |
+
);
|
62 |
+
}
|
63 |
+
}
|
64 |
+
|
65 |
+
/**
|
66 |
+
* Sets accept terms option to TRUE.
|
67 |
+
*/
|
68 |
+
public static function ga_action_update_terms() {
|
69 |
+
update_option( Ga_Admin::GA_SHARETHIS_TERMS_OPTION_NAME, true );
|
70 |
+
|
71 |
+
wp_safe_redirect( admin_url( Ga_Helper::GA_SETTINGS_PAGE_URL ) );
|
72 |
+
}
|
73 |
+
|
74 |
+
/**
|
75 |
+
* Enables all features option.
|
76 |
+
*/
|
77 |
+
public static function ga_action_enable_all_features() {
|
78 |
+
Ga_Helper::update_option( Ga_Admin::GA_DISABLE_ALL_FEATURES, false );
|
79 |
+
|
80 |
+
$page = filter_input( INPUT_GET, 'page', FILTER_SANITIZE_STRING );
|
81 |
+
|
82 |
+
if ( false === empty( $page ) ) {
|
83 |
+
$url = Ga_Helper::create_url( admin_url( 'admin.php' ), compact( 'page' ) );
|
84 |
+
} else {
|
85 |
+
$url = admin_url( Ga_Helper::create_url( Ga_Helper::GA_SETTINGS_PAGE_URL ) );
|
86 |
+
}
|
87 |
+
|
88 |
+
wp_safe_redirect( $url );
|
89 |
+
}
|
90 |
+
|
91 |
+
/**
|
92 |
+
* Disables all features option.
|
93 |
+
*/
|
94 |
+
public static function ga_action_disable_all_features() {
|
95 |
+
Ga_Helper::update_option( Ga_Admin::GA_DISABLE_ALL_FEATURES, true );
|
96 |
+
|
97 |
+
$page = filter_input( INPUT_GET, 'page', FILTER_SANITIZE_STRING );
|
98 |
+
|
99 |
+
$url = false === empty( $page ) ?
|
100 |
+
Ga_Helper::create_url( admin_url( 'admin.php' ), compact( 'page' ) ) :
|
101 |
+
admin_url( Ga_Helper::create_url( Ga_Helper::GA_SETTINGS_PAGE_URL ) );
|
102 |
+
|
103 |
+
wp_safe_redirect( $url );
|
104 |
+
}
|
105 |
+
|
106 |
+
/**
|
107 |
+
* Validate data change post ajax call.
|
108 |
+
*
|
109 |
+
* @return bool
|
110 |
+
*/
|
111 |
+
public static function validate_ajax_data_change_post() {
|
112 |
+
$error = 0;
|
113 |
+
|
114 |
+
$date_range = filter_input( INPUT_POST, 'date_range', FILTER_SANITIZE_STRING );
|
115 |
+
$metric = filter_input( INPUT_POST, 'metric', FILTER_SANITIZE_STRING );
|
116 |
+
|
117 |
+
if ( true === self::verify_nonce( 'ga_ajax_data_change' ) ) {
|
118 |
+
if ( false === empty( $date_range ) ) {
|
119 |
+
if ( false === is_string( $date_range ) ) {
|
120 |
+
$error ++;
|
121 |
+
}
|
122 |
+
} else {
|
123 |
+
$error ++;
|
124 |
+
}
|
125 |
+
|
126 |
+
if ( false === empty( $metric ) ) {
|
127 |
+
if ( false === is_string( $metric ) ) {
|
128 |
+
$error ++;
|
129 |
+
}
|
130 |
+
} else {
|
131 |
+
$error ++;
|
132 |
+
}
|
133 |
+
} else {
|
134 |
+
$error ++;
|
135 |
+
}
|
136 |
+
|
137 |
+
return 0 === $error;
|
138 |
+
}
|
139 |
+
}
|
class/core/Ga_Controller_Core.php
DELETED
@@ -1,40 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
/**
|
4 |
-
* Created by PhpStorm.
|
5 |
-
* User: mdn
|
6 |
-
* Date: 2017-02-01
|
7 |
-
* Time: 09:46
|
8 |
-
*/
|
9 |
-
class Ga_Controller_Core {
|
10 |
-
|
11 |
-
const GA_NONCE_FIELD_NAME = '_gawpnonce';
|
12 |
-
const ACTION_PARAM_NAME = 'ga_action';
|
13 |
-
|
14 |
-
/**
|
15 |
-
* Runs particular action.
|
16 |
-
*/
|
17 |
-
public function handle_actions() {
|
18 |
-
$action = !empty( $_REQUEST[ self::ACTION_PARAM_NAME ] ) ? $_REQUEST[ self::ACTION_PARAM_NAME ] : null;
|
19 |
-
|
20 |
-
if ( $action ) {
|
21 |
-
$class = get_class( $this );
|
22 |
-
if ( is_callable( array(
|
23 |
-
$class,
|
24 |
-
$action
|
25 |
-
) ) ) {
|
26 |
-
call_user_func( $class . '::' . $action );
|
27 |
-
}
|
28 |
-
}
|
29 |
-
}
|
30 |
-
|
31 |
-
/**
|
32 |
-
* Verifies nonce for given acction.
|
33 |
-
*
|
34 |
-
* @param $action
|
35 |
-
* @return bool
|
36 |
-
*/
|
37 |
-
public static function verify_nonce( $action ) {
|
38 |
-
return isset( $_POST[ self::GA_NONCE_FIELD_NAME ] ) && wp_verify_nonce( $_POST[ self::GA_NONCE_FIELD_NAME ], $action );
|
39 |
-
}
|
40 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class/core/class-ga-controller-core.php
ADDED
@@ -0,0 +1,47 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* GoogleAnalytics Controller Core.
|
4 |
+
*
|
5 |
+
* @package GoogleAnalytics
|
6 |
+
*/
|
7 |
+
|
8 |
+
/**
|
9 |
+
* Core Controller.
|
10 |
+
*/
|
11 |
+
class Ga_Controller_Core {
|
12 |
+
|
13 |
+
const GA_NONCE_FIELD_NAME = '_gawpnonce';
|
14 |
+
const ACTION_PARAM_NAME = 'ga_action';
|
15 |
+
|
16 |
+
/**
|
17 |
+
* Runs particular action.
|
18 |
+
*/
|
19 |
+
public function handle_actions() {
|
20 |
+
// Nonce verification happens in verify_nonce function.
|
21 |
+
$action = false === empty( $_REQUEST[ self::ACTION_PARAM_NAME ] ) ? sanitize_text_field( wp_unslash( $_REQUEST[ self::ACTION_PARAM_NAME ] ) ) : null; // phpcs:ignore
|
22 |
+
|
23 |
+
if ( $action ) {
|
24 |
+
$class = get_class( $this );
|
25 |
+
if ( is_callable(
|
26 |
+
array(
|
27 |
+
$class,
|
28 |
+
$action,
|
29 |
+
)
|
30 |
+
) ) {
|
31 |
+
call_user_func( $class . '::' . $action );
|
32 |
+
}
|
33 |
+
}
|
34 |
+
}
|
35 |
+
|
36 |
+
/**
|
37 |
+
* Verifies nonce for given action.
|
38 |
+
*
|
39 |
+
* @param string $action Action.
|
40 |
+
* @return bool
|
41 |
+
*/
|
42 |
+
public static function verify_nonce( $action ) {
|
43 |
+
$nonce = filter_input( INPUT_POST, self::GA_NONCE_FIELD_NAME, FILTER_SANITIZE_STRING );
|
44 |
+
|
45 |
+
return false !== wp_verify_nonce( $nonce, $action );
|
46 |
+
}
|
47 |
+
}
|
class/core/{Ga_View_Core.php → class-ga-view-core.php}
RENAMED
@@ -1,5 +1,13 @@
|
|
1 |
<?php
|
|
|
|
|
|
|
|
|
|
|
2 |
|
|
|
|
|
|
|
3 |
class Ga_View_Core {
|
4 |
|
5 |
/**
|
@@ -11,26 +19,26 @@ class Ga_View_Core {
|
|
11 |
* Loads given view file and it's data.
|
12 |
* Displays view or returns HTML code.
|
13 |
*
|
14 |
-
* @param string $view Filename
|
15 |
-
* @param array
|
16 |
-
* @param bool
|
17 |
*
|
18 |
* @return string
|
19 |
*/
|
20 |
public static function load( $view, $data_array = array(), $html = false ) {
|
21 |
-
if ( !empty( $view ) ) {
|
22 |
foreach ( $data_array as $k => $v ) {
|
23 |
$$k = $v;
|
24 |
}
|
25 |
|
26 |
ob_start();
|
27 |
-
include GA_PLUGIN_DIR .
|
28 |
if ( $html ) {
|
29 |
return ob_get_clean();
|
30 |
} else {
|
31 |
-
|
|
|
32 |
}
|
33 |
}
|
34 |
}
|
35 |
-
|
36 |
}
|
1 |
<?php
|
2 |
+
/**
|
3 |
+
* GoogleAnalytics View Core.
|
4 |
+
*
|
5 |
+
* @package GoogleAnalytics
|
6 |
+
*/
|
7 |
|
8 |
+
/**
|
9 |
+
* View Core class.
|
10 |
+
*/
|
11 |
class Ga_View_Core {
|
12 |
|
13 |
/**
|
19 |
* Loads given view file and it's data.
|
20 |
* Displays view or returns HTML code.
|
21 |
*
|
22 |
+
* @param string $view Filename string.
|
23 |
+
* @param array $data_array Data array.
|
24 |
+
* @param bool $html Whether to display or return HTML code.
|
25 |
*
|
26 |
* @return string
|
27 |
*/
|
28 |
public static function load( $view, $data_array = array(), $html = false ) {
|
29 |
+
if ( ! empty( $view ) ) {
|
30 |
foreach ( $data_array as $k => $v ) {
|
31 |
$$k = $v;
|
32 |
}
|
33 |
|
34 |
ob_start();
|
35 |
+
include GA_PLUGIN_DIR . '/' . self::PATH . '/' . $view . '.php';
|
36 |
if ( $html ) {
|
37 |
return ob_get_clean();
|
38 |
} else {
|
39 |
+
// Note: this gets escaped elsewhere.
|
40 |
+
echo ob_get_clean(); // phpcs:ignore
|
41 |
}
|
42 |
}
|
43 |
}
|
|
|
44 |
}
|
css/ga_additional.css
CHANGED
@@ -1,325 +1,358 @@
|
|
1 |
@-ms-viewport {
|
2 |
-
|
3 |
}
|
|
|
4 |
.ga-table {
|
5 |
-
|
6 |
-
|
7 |
-
|
8 |
-
|
9 |
-
|
10 |
-
|
11 |
-
|
12 |
}
|
13 |
|
14 |
.ga-table > tbody > tr > th,
|
15 |
.ga-table > tbody > tr > td {
|
16 |
-
|
17 |
-
|
18 |
-
|
19 |
-
|
20 |
}
|
|
|
21 |
.ga-table col[class*="col-"] {
|
22 |
-
|
23 |
-
|
24 |
-
|
25 |
}
|
|
|
26 |
.ga-table td[class*="col-"],
|
27 |
.ga-table th[class*="col-"] {
|
28 |
-
|
29 |
-
|
30 |
-
|
31 |
}
|
32 |
|
33 |
.progress {
|
34 |
-
|
35 |
-
|
36 |
-
|
37 |
-
|
38 |
-
|
39 |
-
|
40 |
-
|
41 |
}
|
|
|
42 |
.progress-bar {
|
43 |
-
|
44 |
-
|
45 |
-
|
46 |
-
|
47 |
-
|
48 |
-
|
49 |
-
|
50 |
-
|
51 |
-
|
52 |
-
|
53 |
-
|
54 |
-
|
55 |
-
|
56 |
}
|
|
|
57 |
.progress.active .progress-bar,
|
58 |
.progress-bar.active {
|
59 |
-
|
60 |
-
|
61 |
-
|
62 |
}
|
63 |
|
64 |
.ga-panel {
|
65 |
-
|
66 |
-
|
67 |
-
|
68 |
-
|
69 |
-
|
70 |
-
|
71 |
}
|
|
|
72 |
.ga-panel-body {
|
73 |
-
|
74 |
}
|
|
|
75 |
.ga-panel-heading {
|
76 |
-
|
77 |
-
|
78 |
-
|
79 |
-
|
80 |
}
|
|
|
81 |
.ga-panel-heading > .dropdown .dropdown-toggle {
|
82 |
-
|
83 |
}
|
84 |
|
85 |
.ga-panel-heading > strong {
|
86 |
-
|
87 |
}
|
88 |
|
89 |
.ga-panel > .ga-panel-heading + .ga-panel-collapse > .list-group .list-group-item:first-child {
|
90 |
-
|
91 |
-
|
92 |
}
|
93 |
|
94 |
.ga-panel > .ga-table {
|
95 |
-
|
96 |
}
|
97 |
|
98 |
.ga-panel > .ga-table:first-child {
|
99 |
-
|
100 |
-
|
101 |
}
|
|
|
102 |
.ga-panel > .ga-table:first-child > tbody:first-child > tr:first-child {
|
103 |
-
|
104 |
-
|
105 |
}
|
106 |
|
107 |
|
108 |
.ga-panel > .ga-table:first-child > tbody:first-child > tr:first-child td:first-child {
|
109 |
-
|
110 |
-
|
111 |
}
|
112 |
|
113 |
.ga-panel > .ga-table:last-child {
|
114 |
-
|
115 |
-
|
116 |
}
|
|
|
117 |
.ga-panel > .ga-table:last-child > tbody:last-child > tr:last-child {
|
118 |
-
|
119 |
-
|
120 |
}
|
|
|
121 |
.ga-panel > .ga-table:last-child > tbody:last-child > tr:last-child td:first-child,
|
122 |
.ga-panel > .ga-table:last-child > tbody:last-child > tr:last-child th:first-child {
|
123 |
-
|
124 |
-
|
125 |
}
|
|
|
126 |
.ga-panel > .ga-panel-body + .ga-table,
|
127 |
.ga-panel > .ga-table + .ga-panel-body {
|
128 |
-
|
129 |
}
|
|
|
130 |
.ga-panel > .ga-table > tbody:first-child > tr:first-child th,
|
131 |
.ga-panel > .ga-table > tbody:first-child > tr:first-child td {
|
132 |
-
|
133 |
}
|
134 |
-
|
135 |
-
|
|
|
136 |
}
|
137 |
|
138 |
.ga-panel-default {
|
139 |
-
|
140 |
}
|
|
|
141 |
.ga-panel-default > .ga-panel-heading {
|
142 |
-
|
143 |
-
|
144 |
-
|
145 |
}
|
146 |
|
147 |
.ga-col-pageviews, .ga-box, .ga-col-progressbar {
|
148 |
-
|
149 |
-
|
150 |
-
|
151 |
-
|
152 |
}
|
153 |
-
|
154 |
-
|
155 |
-
|
156 |
-
|
157 |
-
|
|
|
158 |
}
|
|
|
159 |
.ga-row:before,
|
160 |
.ga-row:after,
|
161 |
.ga-panel-body:before,
|
162 |
-
.ga-panel-body:after{
|
163 |
-
|
164 |
-
|
165 |
}
|
166 |
|
167 |
.ga-row:after,
|
168 |
.ga-panel-body:after {
|
169 |
-
|
170 |
}
|
171 |
|
172 |
.ga-row {
|
173 |
-
|
174 |
-
|
175 |
}
|
176 |
|
177 |
.ga-col-pageviews, .ga-box, .ga-col-progressbar {
|
178 |
-
|
179 |
}
|
|
|
180 |
.ga-col-pageviews {
|
181 |
-
|
182 |
}
|
|
|
183 |
.ga-col-progressbar {
|
184 |
-
|
185 |
}
|
186 |
-
|
187 |
-
|
|
|
188 |
}
|
189 |
-
|
190 |
-
|
191 |
-
|
192 |
-
|
193 |
-
|
194 |
-
|
|
|
195 |
}
|
196 |
-
|
197 |
-
|
198 |
-
|
199 |
-
|
200 |
-
|
|
|
201 |
}
|
202 |
-
|
203 |
-
|
204 |
-
|
|
|
205 |
}
|
|
|
206 |
@media (min-width: 600px) {
|
207 |
-
|
208 |
-
|
209 |
-
|
210 |
}
|
|
|
211 |
@media (min-width: 760px) {
|
212 |
-
|
213 |
-
|
214 |
-
|
215 |
-
|
216 |
-
|
217 |
-
|
218 |
-
|
219 |
-
|
220 |
-
|
221 |
-
|
222 |
-
}
|
223 |
-
|
224 |
-
|
225 |
-
|
226 |
-
|
227 |
-
|
228 |
-
|
229 |
-
|
230 |
-
|
231 |
-
|
232 |
-
|
233 |
-
|
234 |
-
|
235 |
-
|
236 |
-
word-wrap: break-word;
|
237 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
238 |
.ga-alert {
|
239 |
-
|
240 |
-
|
241 |
-
|
242 |
-
|
243 |
}
|
244 |
|
245 |
.ga-alert-success {
|
246 |
-
|
247 |
-
|
248 |
-
|
249 |
-
|
250 |
}
|
251 |
|
252 |
.ga-alert-warning {
|
253 |
-
|
254 |
-
|
255 |
-
|
256 |
-
|
257 |
}
|
258 |
|
259 |
.ga-alert-danger {
|
260 |
-
|
261 |
-
|
262 |
-
|
263 |
-
|
264 |
}
|
265 |
|
266 |
-
.ga-alert-link{
|
267 |
-
|
268 |
}
|
269 |
|
270 |
.ga-switch {
|
271 |
-
|
272 |
-
|
273 |
-
|
274 |
-
|
275 |
}
|
276 |
|
277 |
-
.ga-switch input {
|
|
|
|
|
278 |
|
279 |
.ga-slider {
|
280 |
-
|
281 |
-
|
282 |
-
|
283 |
-
|
284 |
-
|
285 |
-
|
286 |
-
|
287 |
-
|
288 |
-
|
289 |
}
|
290 |
|
291 |
.ga-slider:before {
|
292 |
-
|
293 |
-
|
294 |
-
|
295 |
-
|
296 |
-
|
297 |
-
|
298 |
-
|
299 |
-
|
300 |
-
|
301 |
-
|
302 |
}
|
303 |
|
304 |
input:checked + .ga-slider {
|
305 |
-
|
306 |
}
|
307 |
|
308 |
input:focus + .ga-slider {
|
309 |
-
|
310 |
}
|
311 |
|
312 |
input:checked + .ga-slider:before {
|
313 |
-
|
314 |
-
|
315 |
-
|
316 |
}
|
317 |
|
318 |
/* Rounded sliders */
|
319 |
.ga-slider.round {
|
320 |
-
|
321 |
}
|
322 |
|
323 |
.ga-slider.round:before {
|
324 |
-
|
325 |
}
|
1 |
@-ms-viewport {
|
2 |
+
width: device-width;
|
3 |
}
|
4 |
+
|
5 |
.ga-table {
|
6 |
+
border-collapse: collapse;
|
7 |
+
border-spacing: 0;
|
8 |
+
background-color: transparent;
|
9 |
+
width: 100%;
|
10 |
+
max-width: 100%;
|
11 |
+
margin-bottom: 20px;
|
12 |
+
border: 1px solid #dddddd;
|
13 |
}
|
14 |
|
15 |
.ga-table > tbody > tr > th,
|
16 |
.ga-table > tbody > tr > td {
|
17 |
+
padding: 8px;
|
18 |
+
line-height: 1.42857143;
|
19 |
+
vertical-align: top;
|
20 |
+
border: 1px solid #dddddd;
|
21 |
}
|
22 |
+
|
23 |
.ga-table col[class*="col-"] {
|
24 |
+
position: static;
|
25 |
+
float: none;
|
26 |
+
display: table-column;
|
27 |
}
|
28 |
+
|
29 |
.ga-table td[class*="col-"],
|
30 |
.ga-table th[class*="col-"] {
|
31 |
+
position: static;
|
32 |
+
float: none;
|
33 |
+
display: table-cell;
|
34 |
}
|
35 |
|
36 |
.progress {
|
37 |
+
overflow: hidden;
|
38 |
+
height: 20px;
|
39 |
+
margin-bottom: 20px;
|
40 |
+
background-color: #f5f5f5;
|
41 |
+
border-radius: 4px;
|
42 |
+
-webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1);
|
43 |
+
box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1);
|
44 |
}
|
45 |
+
|
46 |
.progress-bar {
|
47 |
+
float: left;
|
48 |
+
width: 0%;
|
49 |
+
height: 100%;
|
50 |
+
font-size: 12px;
|
51 |
+
line-height: 20px;
|
52 |
+
color: #ffffff;
|
53 |
+
text-align: center;
|
54 |
+
background-color: #337ab7;
|
55 |
+
-webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15);
|
56 |
+
box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15);
|
57 |
+
-webkit-transition: width 0.6s ease;
|
58 |
+
-o-transition: width 0.6s ease;
|
59 |
+
transition: width 0.6s ease;
|
60 |
}
|
61 |
+
|
62 |
.progress.active .progress-bar,
|
63 |
.progress-bar.active {
|
64 |
+
-webkit-animation: progress-bar-stripes 2s linear infinite;
|
65 |
+
-o-animation: progress-bar-stripes 2s linear infinite;
|
66 |
+
animation: progress-bar-stripes 2s linear infinite;
|
67 |
}
|
68 |
|
69 |
.ga-panel {
|
70 |
+
margin-bottom: 20px;
|
71 |
+
background-color: #ffffff;
|
72 |
+
border: 1px solid transparent;
|
73 |
+
border-radius: 4px;
|
74 |
+
-webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05);
|
75 |
+
box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05);
|
76 |
}
|
77 |
+
|
78 |
.ga-panel-body {
|
79 |
+
padding: 15px;
|
80 |
}
|
81 |
+
|
82 |
.ga-panel-heading {
|
83 |
+
padding: 10px 15px;
|
84 |
+
border-bottom: 1px solid transparent;
|
85 |
+
border-top-right-radius: 3px;
|
86 |
+
border-top-left-radius: 3px;
|
87 |
}
|
88 |
+
|
89 |
.ga-panel-heading > .dropdown .dropdown-toggle {
|
90 |
+
color: inherit;
|
91 |
}
|
92 |
|
93 |
.ga-panel-heading > strong {
|
94 |
+
font-weight: bold;
|
95 |
}
|
96 |
|
97 |
.ga-panel > .ga-panel-heading + .ga-panel-collapse > .list-group .list-group-item:first-child {
|
98 |
+
border-top-right-radius: 0;
|
99 |
+
border-top-left-radius: 0;
|
100 |
}
|
101 |
|
102 |
.ga-panel > .ga-table {
|
103 |
+
margin-bottom: 0;
|
104 |
}
|
105 |
|
106 |
.ga-panel > .ga-table:first-child {
|
107 |
+
border-top-right-radius: 3px;
|
108 |
+
border-top-left-radius: 3px;
|
109 |
}
|
110 |
+
|
111 |
.ga-panel > .ga-table:first-child > tbody:first-child > tr:first-child {
|
112 |
+
border-top-left-radius: 3px;
|
113 |
+
border-top-right-radius: 3px;
|
114 |
}
|
115 |
|
116 |
|
117 |
.ga-panel > .ga-table:first-child > tbody:first-child > tr:first-child td:first-child {
|
118 |
+
border-top-left-radius: 3px;
|
119 |
+
border-top-right-radius: 3px;
|
120 |
}
|
121 |
|
122 |
.ga-panel > .ga-table:last-child {
|
123 |
+
border-bottom-right-radius: 3px;
|
124 |
+
border-bottom-left-radius: 3px;
|
125 |
}
|
126 |
+
|
127 |
.ga-panel > .ga-table:last-child > tbody:last-child > tr:last-child {
|
128 |
+
border-bottom-left-radius: 3px;
|
129 |
+
border-bottom-right-radius: 3px;
|
130 |
}
|
131 |
+
|
132 |
.ga-panel > .ga-table:last-child > tbody:last-child > tr:last-child td:first-child,
|
133 |
.ga-panel > .ga-table:last-child > tbody:last-child > tr:last-child th:first-child {
|
134 |
+
border-bottom-left-radius: 3px;
|
135 |
+
border-bottom-right-radius: 3px;
|
136 |
}
|
137 |
+
|
138 |
.ga-panel > .ga-panel-body + .ga-table,
|
139 |
.ga-panel > .ga-table + .ga-panel-body {
|
140 |
+
border-top: 1px solid #dddddd;
|
141 |
}
|
142 |
+
|
143 |
.ga-panel > .ga-table > tbody:first-child > tr:first-child th,
|
144 |
.ga-panel > .ga-table > tbody:first-child > tr:first-child td {
|
145 |
+
border-top: 0;
|
146 |
}
|
147 |
+
|
148 |
+
.ga-panel > .ga-table {
|
149 |
+
border: 0;
|
150 |
}
|
151 |
|
152 |
.ga-panel-default {
|
153 |
+
border-color: #dddddd;
|
154 |
}
|
155 |
+
|
156 |
.ga-panel-default > .ga-panel-heading {
|
157 |
+
color: #333333;
|
158 |
+
background-color: #dcdcdc;
|
159 |
+
border-color: #dddddd;
|
160 |
}
|
161 |
|
162 |
.ga-col-pageviews, .ga-box, .ga-col-progressbar {
|
163 |
+
position: relative;
|
164 |
+
min-height: 1px;
|
165 |
+
padding-left: 15px;
|
166 |
+
padding-right: 15px;
|
167 |
}
|
168 |
+
|
169 |
+
.ga-col-name {
|
170 |
+
width: 20%;
|
171 |
+
overflow: hidden;
|
172 |
+
text-overflow: ellipsis;
|
173 |
+
word-wrap: break-word;
|
174 |
}
|
175 |
+
|
176 |
.ga-row:before,
|
177 |
.ga-row:after,
|
178 |
.ga-panel-body:before,
|
179 |
+
.ga-panel-body:after {
|
180 |
+
content: " ";
|
181 |
+
display: table;
|
182 |
}
|
183 |
|
184 |
.ga-row:after,
|
185 |
.ga-panel-body:after {
|
186 |
+
clear: both;
|
187 |
}
|
188 |
|
189 |
.ga-row {
|
190 |
+
margin-left: -15px;
|
191 |
+
margin-right: -15px;
|
192 |
}
|
193 |
|
194 |
.ga-col-pageviews, .ga-box, .ga-col-progressbar {
|
195 |
+
float: left;
|
196 |
}
|
197 |
+
|
198 |
.ga-col-pageviews {
|
199 |
+
width: 16.66666667%;
|
200 |
}
|
201 |
+
|
202 |
.ga-col-progressbar {
|
203 |
+
width: 41.66666667%;
|
204 |
}
|
205 |
+
|
206 |
+
.ga-box-diff {
|
207 |
+
font-size: 16px;
|
208 |
}
|
209 |
+
|
210 |
+
.ga-box-comparison {
|
211 |
+
color: grey;
|
212 |
+
font-size: 12px;
|
213 |
+
overflow: hidden;
|
214 |
+
text-overflow: ellipsis;
|
215 |
+
white-space: nowrap;
|
216 |
}
|
217 |
+
|
218 |
+
.ga-box-label {
|
219 |
+
font-size: 14px;
|
220 |
+
overflow: hidden;
|
221 |
+
text-overflow: ellipsis;
|
222 |
+
white-space: nowrap;
|
223 |
}
|
224 |
+
|
225 |
+
.ga-box {
|
226 |
+
width: 140px;
|
227 |
+
box-sizing: border-box;
|
228 |
}
|
229 |
+
|
230 |
@media (min-width: 600px) {
|
231 |
+
.ga-box {
|
232 |
+
width: 25%;
|
233 |
+
}
|
234 |
}
|
235 |
+
|
236 |
@media (min-width: 760px) {
|
237 |
+
.ga-box-diff {
|
238 |
+
font-size: 24px;
|
239 |
+
}
|
240 |
+
|
241 |
+
.ga-box-comparison {
|
242 |
+
font-size: 16px
|
243 |
+
}
|
244 |
+
|
245 |
+
.ga-box-label {
|
246 |
+
font-size: 16px
|
247 |
+
}
|
248 |
+
|
249 |
+
}
|
250 |
+
|
251 |
+
@media screen and (orientation: portrait) and (-webkit-device-pixel-ratio: 3) {
|
252 |
+
.ga-col-name {
|
253 |
+
max-width: 100px;
|
254 |
+
}
|
255 |
+
|
256 |
+
.ga-chart {
|
257 |
+
width: 300px;
|
258 |
+
overflow: hidden;
|
259 |
+
text-overflow: ellipsis;
|
260 |
+
}
|
|
|
261 |
}
|
262 |
+
|
263 |
+
.ga-source-name {
|
264 |
+
color: #337ab7;
|
265 |
+
text-decoration: none;
|
266 |
+
word-wrap: break-word;
|
267 |
+
}
|
268 |
+
|
269 |
.ga-alert {
|
270 |
+
padding: 15px;
|
271 |
+
margin-bottom: 20px;
|
272 |
+
border: 1px solid transparent;
|
273 |
+
border-radius: 4px;
|
274 |
}
|
275 |
|
276 |
.ga-alert-success {
|
277 |
+
color: #3c763d;
|
278 |
+
background-color: #dff0d8;
|
279 |
+
border-color: #d6e9c6;
|
280 |
+
max-width: 95%;
|
281 |
}
|
282 |
|
283 |
.ga-alert-warning {
|
284 |
+
color: #8a6d3b;
|
285 |
+
background-color: #fcf8e3;
|
286 |
+
border-color: #faebcc;
|
287 |
+
max-width: 95%;
|
288 |
}
|
289 |
|
290 |
.ga-alert-danger {
|
291 |
+
color: #a94442;
|
292 |
+
background-color: #f2dede;
|
293 |
+
border-color: #ebccd1;
|
294 |
+
max-width: 95%;
|
295 |
}
|
296 |
|
297 |
+
.ga-alert-link {
|
298 |
+
margin-left: 10px;
|
299 |
}
|
300 |
|
301 |
.ga-switch {
|
302 |
+
position: relative;
|
303 |
+
display: inline-block;
|
304 |
+
width: 42px;
|
305 |
+
height: 14px;
|
306 |
}
|
307 |
|
308 |
+
.ga-switch input {
|
309 |
+
display: none;
|
310 |
+
}
|
311 |
|
312 |
.ga-slider {
|
313 |
+
position: absolute;
|
314 |
+
cursor: pointer;
|
315 |
+
top: 0;
|
316 |
+
left: 0;
|
317 |
+
right: 0;
|
318 |
+
bottom: 0;
|
319 |
+
background-color: #ccc;
|
320 |
+
-webkit-transition: .1s;
|
321 |
+
transition: .1s;
|
322 |
}
|
323 |
|
324 |
.ga-slider:before {
|
325 |
+
position: absolute;
|
326 |
+
content: "";
|
327 |
+
height: 20px;
|
328 |
+
width: 20px;
|
329 |
+
left: 0px;
|
330 |
+
bottom: -4px;
|
331 |
+
border: solid 1px gray;
|
332 |
+
background-color: white;
|
333 |
+
-webkit-transition: .1s;
|
334 |
+
transition: .1s;
|
335 |
}
|
336 |
|
337 |
input:checked + .ga-slider {
|
338 |
+
background-color: #0085ba;
|
339 |
}
|
340 |
|
341 |
input:focus + .ga-slider {
|
342 |
+
box-shadow: 0 0 1px #2196F3;
|
343 |
}
|
344 |
|
345 |
input:checked + .ga-slider:before {
|
346 |
+
-webkit-transform: translateX(20px);
|
347 |
+
-ms-transform: translateX(20px);
|
348 |
+
transform: translateX(20px);
|
349 |
}
|
350 |
|
351 |
/* Rounded sliders */
|
352 |
.ga-slider.round {
|
353 |
+
border-radius: 34px;
|
354 |
}
|
355 |
|
356 |
.ga-slider.round:before {
|
357 |
+
border-radius: 50%;
|
358 |
}
|
css/ga_modal.css
CHANGED
@@ -1,100 +1,100 @@
|
|
1 |
.ga-modal {
|
2 |
-
|
3 |
-
|
4 |
-
|
5 |
-
|
6 |
-
|
7 |
-
|
8 |
-
|
9 |
-
|
10 |
-
|
11 |
-
|
12 |
}
|
13 |
|
14 |
.ga-modal-dialog {
|
15 |
}
|
16 |
|
17 |
.ga-modal-body {
|
18 |
-
|
19 |
-
|
20 |
}
|
21 |
|
22 |
.ga-modal-header {
|
23 |
-
|
24 |
-
|
25 |
-
|
26 |
-
|
27 |
-
|
28 |
-
|
29 |
}
|
30 |
|
31 |
.ga-modal-content {
|
32 |
-
|
33 |
-
|
34 |
-
|
35 |
-
|
36 |
-
|
37 |
-
|
38 |
-
|
39 |
-
|
40 |
-
|
41 |
-
|
42 |
-
|
43 |
-
|
44 |
}
|
45 |
|
46 |
.ga-modal-footer {
|
47 |
-
|
48 |
-
|
49 |
-
|
50 |
-
|
51 |
-
|
52 |
-
|
53 |
-
|
54 |
}
|
55 |
|
56 |
/* The Close Button */
|
57 |
.ga-close {
|
58 |
-
|
59 |
-
|
60 |
-
|
61 |
-
|
62 |
}
|
63 |
|
64 |
.ga-close:hover,
|
65 |
.ga-close:focus {
|
66 |
-
|
67 |
-
|
68 |
-
|
69 |
}
|
70 |
|
71 |
/* Add Animation */
|
72 |
@-webkit-keyframes animatetop {
|
73 |
-
|
74 |
-
|
75 |
-
|
76 |
-
|
77 |
-
|
78 |
-
|
79 |
-
|
80 |
-
|
81 |
}
|
82 |
|
83 |
@keyframes animatetop {
|
84 |
-
|
85 |
-
|
86 |
-
|
87 |
-
|
88 |
-
|
89 |
-
|
90 |
-
|
91 |
-
|
92 |
}
|
93 |
|
94 |
#ga_access_code_tmp {
|
95 |
-
|
96 |
}
|
97 |
|
98 |
@media screen {
|
99 |
|
100 |
-
}
|
1 |
.ga-modal {
|
2 |
+
display: none; /* Hidden by default */
|
3 |
+
position: fixed; /* Stay in place */
|
4 |
+
z-index: 1; /* Sit on top */
|
5 |
+
left: 0;
|
6 |
+
top: 0;
|
7 |
+
width: 100%; /* Full width */
|
8 |
+
height: 100%; /* Full height */
|
9 |
+
overflow: auto; /* Enable scroll if needed */
|
10 |
+
background-color: rgb(0, 0, 0); /* Fallback color */
|
11 |
+
background-color: rgba(0, 0, 0, 0.4); /* Black w/ opacity */
|
12 |
}
|
13 |
|
14 |
.ga-modal-dialog {
|
15 |
}
|
16 |
|
17 |
.ga-modal-body {
|
18 |
+
padding: 15px 0px 15px 16px;
|
19 |
+
background-color: #fff;
|
20 |
}
|
21 |
|
22 |
.ga-modal-header {
|
23 |
+
padding: 2px 16px;
|
24 |
+
background-color: #fff;
|
25 |
+
border-bottom: 1px solid #cccccc;
|
26 |
+
border-top-left-radius: 4px;
|
27 |
+
border-top-right-radius: 4px;
|
28 |
+
color: #000;
|
29 |
}
|
30 |
|
31 |
.ga-modal-content {
|
32 |
+
position: relative;
|
33 |
+
background-color: transparent;
|
34 |
+
margin: auto;
|
35 |
+
margin-top: 50px;
|
36 |
+
padding: 0;
|
37 |
+
border: 1px solid #888;
|
38 |
+
width: 50%;
|
39 |
+
box-shadow: 0 4px 8px 0 rgba(0, 0, 0, 0.2), 0 6px 20px 0 rgba(0, 0, 0, 0.19);
|
40 |
+
-webkit-animation-name: animatetop;
|
41 |
+
-webkit-animation-duration: 0.4s;
|
42 |
+
animation-name: animatetop;
|
43 |
+
animation-duration: 0.4s
|
44 |
}
|
45 |
|
46 |
.ga-modal-footer {
|
47 |
+
padding: 2px 16px 16px;
|
48 |
+
background-color: #fff;
|
49 |
+
color: #000;
|
50 |
+
border: 1px solid #fff;
|
51 |
+
border-bottom-left-radius: 4px;
|
52 |
+
border-bottom-right-radius: 4px;
|
53 |
+
text-align: right;
|
54 |
}
|
55 |
|
56 |
/* The Close Button */
|
57 |
.ga-close {
|
58 |
+
color: #aaa;
|
59 |
+
float: right;
|
60 |
+
font-size: 28px;
|
61 |
+
font-weight: bold;
|
62 |
}
|
63 |
|
64 |
.ga-close:hover,
|
65 |
.ga-close:focus {
|
66 |
+
color: black;
|
67 |
+
text-decoration: none;
|
68 |
+
cursor: pointer;
|
69 |
}
|
70 |
|
71 |
/* Add Animation */
|
72 |
@-webkit-keyframes animatetop {
|
73 |
+
from {
|
74 |
+
top: -300px;
|
75 |
+
opacity: 0
|
76 |
+
}
|
77 |
+
to {
|
78 |
+
top: 0;
|
79 |
+
opacity: 1
|
80 |
+
}
|
81 |
}
|
82 |
|
83 |
@keyframes animatetop {
|
84 |
+
from {
|
85 |
+
top: -300px;
|
86 |
+
opacity: 0
|
87 |
+
}
|
88 |
+
to {
|
89 |
+
top: 0;
|
90 |
+
opacity: 1
|
91 |
+
}
|
92 |
}
|
93 |
|
94 |
#ga_access_code_tmp {
|
95 |
+
width: 80%;
|
96 |
}
|
97 |
|
98 |
@media screen {
|
99 |
|
100 |
+
}
|
css/ga_old_wp_support.css
CHANGED
@@ -1,20 +1,20 @@
|
|
1 |
.notice {
|
2 |
-
|
3 |
-
|
4 |
-
|
5 |
-
|
6 |
-
|
7 |
}
|
8 |
.notice-warning {
|
9 |
-
|
10 |
}
|
11 |
.notice-success {
|
12 |
-
|
13 |
}
|
14 |
.notice-error{
|
15 |
-
|
16 |
}
|
17 |
.notice p{
|
18 |
-
|
19 |
-
|
20 |
-
}
|
1 |
.notice {
|
2 |
+
background: #fff none repeat scroll 0 0;
|
3 |
+
border-left: 4px solid #fff;
|
4 |
+
box-shadow: 0 1px 1px 0 rgba(0, 0, 0, 0.1);
|
5 |
+
margin: 5px 0 15px;
|
6 |
+
padding: 1px 12px;
|
7 |
}
|
8 |
.notice-warning {
|
9 |
+
border-left-color: #ffb900;
|
10 |
}
|
11 |
.notice-success {
|
12 |
+
border-left-color: #46b450;
|
13 |
}
|
14 |
.notice-error{
|
15 |
+
border-left-color: #dc3232;
|
16 |
}
|
17 |
.notice p{
|
18 |
+
margin: 0.5em 0;
|
19 |
+
padding: 2px;
|
20 |
+
}
|
css/googleanalytics.css
CHANGED
@@ -1,125 +1,124 @@
|
|
1 |
@CHARSET "UTF-8";
|
2 |
|
3 |
.wrap.ga-wrap {
|
4 |
-
|
5 |
-
|
6 |
-
|
7 |
-
|
8 |
-
|
9 |
-
|
10 |
-
|
11 |
}
|
12 |
|
13 |
.ga_container {
|
14 |
-
|
15 |
}
|
16 |
|
17 |
.google-analytics_page_googleanalytics-settings .ga_container {
|
18 |
-
|
19 |
-
|
20 |
-
|
21 |
}
|
22 |
|
23 |
.ga_container .sidebar-ad {
|
24 |
-
|
25 |
-
|
26 |
-
|
27 |
-
|
28 |
}
|
29 |
|
30 |
.ga_container .sidebar-ad img {
|
31 |
-
|
32 |
}
|
33 |
|
34 |
.ga_container a.view-report {
|
35 |
-
|
36 |
-
|
37 |
-
|
38 |
-
|
39 |
-
|
40 |
-
|
41 |
-
|
42 |
-
|
43 |
-
|
44 |
-
|
45 |
}
|
46 |
|
47 |
.ga_container .filter-choices a,
|
48 |
-
.ga_container .filter-choices button
|
49 |
-
|
50 |
-
|
51 |
-
|
52 |
-
|
53 |
-
|
54 |
-
|
55 |
-
|
56 |
-
|
57 |
-
|
58 |
-
|
59 |
-
|
60 |
-
color: #888888;
|
61 |
}
|
62 |
|
63 |
.ga_container .filter-choices a.selected,
|
64 |
.ga_container .filter-choices button {
|
65 |
-
|
66 |
-
|
67 |
}
|
68 |
|
69 |
.ga_container .filter-choices button {
|
70 |
-
|
71 |
}
|
72 |
|
73 |
#exTab1, #exTab2 {
|
74 |
-
|
75 |
}
|
76 |
|
77 |
#exTab1 .tab-content {
|
78 |
-
|
79 |
-
|
80 |
-
|
81 |
}
|
82 |
|
83 |
#exTab2 h3 {
|
84 |
-
|
85 |
-
|
86 |
-
|
87 |
}
|
88 |
|
89 |
/* remove border radius for the tab */
|
90 |
#exTab1 .nav-pills > li > a {
|
91 |
-
|
92 |
}
|
93 |
|
94 |
/* change border radius for the tab , apply corners on top*/
|
95 |
#exTab3 .nav-pills > li > a {
|
96 |
-
|
97 |
}
|
98 |
|
99 |
#exTab3 .tab-content {
|
100 |
-
|
101 |
-
|
102 |
-
|
103 |
}
|
104 |
|
105 |
label.ga_checkbox_label {
|
106 |
-
|
107 |
}
|
108 |
|
109 |
.form-table th {
|
110 |
-
|
111 |
}
|
112 |
|
113 |
.wrap.ga-notice {
|
114 |
-
|
115 |
-
|
116 |
-
|
117 |
}
|
118 |
|
119 |
.ga_warning {
|
120 |
-
|
121 |
-
|
122 |
-
|
123 |
}
|
124 |
|
125 |
.ga-boxes-container {
|
@@ -127,496 +126,495 @@ label.ga_checkbox_label {
|
|
127 |
}
|
128 |
|
129 |
.ga-box-row {
|
130 |
-
|
131 |
-
|
132 |
-
|
133 |
-
|
134 |
}
|
135 |
|
136 |
.ga-box-column {
|
137 |
-
|
138 |
-
|
139 |
-
|
140 |
-
|
141 |
}
|
142 |
|
143 |
.ga-box-dashboard {
|
144 |
-
|
145 |
-
|
146 |
-
|
147 |
-
|
148 |
}
|
149 |
|
150 |
.ga-box-centered {
|
151 |
-
|
152 |
}
|
153 |
|
154 |
.ga-loader-wrapper {
|
155 |
-
|
156 |
-
|
157 |
-
|
158 |
}
|
159 |
|
160 |
.ga-loader-wrapper.stats-page {
|
161 |
-
|
162 |
-
|
163 |
-
|
164 |
-
|
165 |
}
|
166 |
|
167 |
.ga-loader {
|
168 |
-
|
169 |
-
|
170 |
-
|
171 |
-
|
172 |
-
|
173 |
-
|
174 |
-
|
175 |
}
|
176 |
|
177 |
.ga-loader.stats-page-loader {
|
178 |
-
|
179 |
-
|
180 |
-
|
181 |
}
|
182 |
|
183 |
@keyframes spin {
|
184 |
-
|
185 |
-
|
186 |
-
|
187 |
-
|
188 |
-
|
189 |
-
|
190 |
}
|
191 |
|
192 |
.ga-review-us {
|
193 |
-
|
194 |
-
|
195 |
-
|
196 |
-
|
197 |
-
|
198 |
-
|
199 |
-
|
200 |
-
|
201 |
-
|
202 |
}
|
203 |
|
204 |
.ga-review-us #close-review-us {
|
205 |
-
|
206 |
}
|
207 |
|
208 |
.ga-review-us h3 {
|
209 |
-
|
210 |
}
|
211 |
|
212 |
.ga-review-us h3 a {
|
213 |
-
|
214 |
}
|
215 |
|
216 |
.ga-chart {
|
217 |
}
|
218 |
|
219 |
.label-grey {
|
220 |
-
|
221 |
}
|
222 |
|
223 |
.ga-tooltip {
|
224 |
-
|
225 |
-
|
226 |
}
|
227 |
|
228 |
.ga-tooltip input[disabled] {
|
229 |
-
|
230 |
}
|
231 |
|
232 |
.ga-tooltiptext {
|
233 |
-
|
234 |
-
|
235 |
-
|
236 |
-
|
237 |
-
|
238 |
-
|
239 |
-
|
240 |
-
|
241 |
-
|
242 |
-
|
243 |
-
|
244 |
-
|
245 |
-
|
246 |
-
|
247 |
-
|
248 |
}
|
249 |
|
250 |
.ga-tt-abs {
|
251 |
-
|
252 |
-
|
253 |
-
|
254 |
}
|
255 |
|
256 |
.ga-tooltip:hover .ga-tooltiptext {
|
257 |
-
|
258 |
}
|
259 |
|
260 |
-
.weight-normal{
|
261 |
-
|
262 |
}
|
263 |
|
264 |
.ga-love-text {
|
265 |
-
|
266 |
-
|
267 |
-
|
268 |
-
|
269 |
}
|
270 |
|
271 |
-
.ga-debug-form-div{
|
272 |
-
|
273 |
}
|
274 |
|
275 |
.ga-debug-form-label {
|
276 |
-
|
277 |
-
|
278 |
-
|
279 |
}
|
280 |
|
281 |
.ga-debug-form-field {
|
282 |
-
|
283 |
}
|
284 |
|
285 |
.ga-debug-form-loader {
|
286 |
-
|
287 |
}
|
288 |
|
289 |
.demo-ad.ga-panel-default img {
|
290 |
-
|
291 |
-
|
292 |
-
|
293 |
}
|
294 |
|
295 |
.demo-enable-popup {
|
296 |
-
|
297 |
-
|
298 |
-
|
299 |
-
|
300 |
-
|
301 |
-
|
302 |
-
|
303 |
-
|
304 |
-
|
305 |
}
|
306 |
|
307 |
.demo-enable-popup.engage {
|
308 |
-
|
309 |
}
|
310 |
|
311 |
.demo-enable-popup .close-demo-modal {
|
312 |
-
|
313 |
-
|
314 |
-
|
315 |
-
|
316 |
-
|
317 |
-
|
318 |
-
|
319 |
-
|
320 |
-
|
321 |
}
|
322 |
|
323 |
.demo-enable-popup p {
|
324 |
-
|
325 |
-
|
326 |
-
|
327 |
}
|
328 |
|
329 |
#sharethis-form-color {
|
330 |
-
|
331 |
-
|
332 |
-
|
333 |
-
|
334 |
}
|
335 |
|
336 |
#sharethis-form-color .color {
|
337 |
-
|
338 |
-
|
339 |
-
|
340 |
}
|
341 |
|
342 |
-
#sharethis-form-color .color.selected{
|
343 |
-
|
344 |
}
|
345 |
|
346 |
#publisher-purpose .purpose-item {
|
347 |
-
|
348 |
}
|
349 |
|
350 |
#publisher-purpose .purpose-item div.title {
|
351 |
-
|
352 |
-
|
353 |
-
|
354 |
-
|
355 |
}
|
356 |
|
357 |
#publisher-purpose .purpose-item label {
|
358 |
-
|
359 |
-
|
360 |
}
|
361 |
|
362 |
.gdpr-platform {
|
363 |
-
|
364 |
-
|
365 |
-
|
366 |
-
|
367 |
-
|
368 |
-
|
369 |
}
|
370 |
|
371 |
.gdpr-submit-button {
|
372 |
-
|
373 |
-
|
374 |
-
|
375 |
-
|
376 |
}
|
377 |
|
378 |
.gdpr-platform #publisher-purpose .purpose-item label:first-of-type {
|
379 |
-
|
380 |
}
|
381 |
|
382 |
-
.gdpr-platform .switch label input[type=radio]:checked
|
383 |
-
.gdpr-platform .switch label input[type=checkbox]:checked
|
384 |
-
|
385 |
-
|
386 |
-
|
387 |
}
|
388 |
|
389 |
.gdpr-platform input[type="text"] {
|
390 |
-
|
391 |
-
|
392 |
-
|
393 |
}
|
394 |
|
395 |
.gdpr-platform select {
|
396 |
-
|
397 |
-
|
398 |
-
|
399 |
}
|
400 |
|
401 |
-
.gdpr-platform .switch label input[type=radio]:checked
|
402 |
-
.gdpr-platform .switch label input[type=checkbox]:checked
|
403 |
-
|
404 |
-
|
405 |
-
|
406 |
-
|
407 |
-
|
408 |
}
|
409 |
|
410 |
.gdpr-platform .switch label {
|
411 |
-
|
412 |
-
|
413 |
-
|
414 |
}
|
415 |
|
416 |
.gdpr-platform .switch label .lever {
|
417 |
-
|
418 |
-
|
419 |
-
|
420 |
-
|
421 |
-
|
422 |
-
|
423 |
-
|
424 |
-
|
425 |
-
|
426 |
-
|
427 |
-
|
428 |
-
|
429 |
}
|
430 |
|
431 |
.gdpr-platform .switch label .lever:after {
|
432 |
-
|
433 |
-
|
434 |
-
|
435 |
}
|
436 |
|
437 |
|
438 |
-
.gdpr-platform [type=radio].filled-in+label:before, .gdpr-platform [type=checkbox].filled-in+label:before {
|
439 |
-
|
440 |
-
|
441 |
-
|
442 |
-
|
443 |
-
|
444 |
}
|
445 |
|
446 |
p.form-color {
|
447 |
-
|
448 |
-
|
449 |
-
|
450 |
}
|
451 |
|
452 |
#sharethis-form-color {
|
453 |
-
|
454 |
-
|
455 |
-
|
456 |
-
|
457 |
}
|
458 |
|
459 |
#sharethis-form-color .color {
|
460 |
-
|
461 |
-
|
462 |
-
|
463 |
}
|
464 |
|
465 |
-
#sharethis-form-color .color.selected{
|
466 |
-
|
467 |
}
|
468 |
|
469 |
.empty-choices {
|
470 |
-
|
471 |
-
|
472 |
-
|
473 |
-
|
474 |
}
|
475 |
|
476 |
a.st-rc-link {
|
477 |
-
|
478 |
}
|
479 |
|
480 |
.gdpr-platform a.st-rc-link {
|
481 |
-
|
482 |
-
|
483 |
-
|
484 |
-
|
485 |
-
|
486 |
-
|
487 |
-
|
488 |
-
|
489 |
-
|
490 |
-
|
491 |
-
|
492 |
-
|
493 |
}
|
494 |
|
495 |
.empty-choices a {
|
496 |
-
|
497 |
-
|
498 |
}
|
499 |
|
500 |
.empty-choices a.st-rc-link {
|
501 |
-
|
502 |
}
|
503 |
|
504 |
.gdpr-platform .vendor-table-body {
|
505 |
-
|
506 |
-
|
507 |
-
|
508 |
-
|
509 |
}
|
510 |
|
511 |
.gdpr-platform .vendor-table-cell {
|
512 |
-
|
513 |
-
|
514 |
}
|
515 |
|
516 |
.gdpr-platform .purpose-item input[type="checkbox"],
|
517 |
.gdpr-platform .vendor-table-cell input[type="checkbox"],
|
518 |
-
.gdpr-platform .purpose-item input[type="radio"]
|
519 |
-
|
520 |
-
display: none;
|
521 |
}
|
522 |
|
523 |
.gdpr-platform .exclusion-item {
|
524 |
-
|
525 |
-
|
526 |
}
|
527 |
|
528 |
.gdpr-platform label.enable-tool {
|
529 |
-
|
530 |
-
|
531 |
-
|
532 |
}
|
533 |
|
534 |
.gdpr-platform h2 {
|
535 |
-
|
536 |
}
|
537 |
|
538 |
.gdpr-platform .error-message {
|
539 |
-
|
540 |
-
|
541 |
}
|
542 |
|
543 |
.gdpr-platform .gdpr-landing img {
|
544 |
-
|
545 |
-
|
546 |
-
|
547 |
}
|
548 |
|
549 |
.register-section {
|
550 |
-
|
551 |
-
|
552 |
}
|
553 |
|
554 |
.register-section button {
|
555 |
-
|
556 |
-
|
557 |
-
|
558 |
-
|
559 |
-
|
560 |
}
|
561 |
|
562 |
.accor-wrap {
|
563 |
-
|
564 |
-
|
565 |
-
|
566 |
}
|
567 |
|
568 |
.accor-wrap .accor-tab {
|
569 |
-
|
570 |
-
|
571 |
-
|
572 |
-
|
573 |
}
|
574 |
|
575 |
.accor-wrap .well {
|
576 |
-
|
577 |
-
|
578 |
}
|
579 |
|
580 |
.accor-wrap .well h3 {
|
581 |
-
|
582 |
-
|
583 |
-
|
584 |
-
|
585 |
}
|
586 |
|
587 |
.accor-wrap .well .col-md-12:first-of-type h3 {
|
588 |
-
|
589 |
}
|
590 |
|
591 |
.accor-wrap .accor-content {
|
592 |
-
|
593 |
}
|
594 |
|
595 |
.accor-wrap .accor-arrow {
|
596 |
-
|
597 |
-
|
598 |
-
|
599 |
-
|
600 |
-
|
601 |
-
|
602 |
-
|
603 |
}
|
604 |
|
605 |
.ga-demo-chart .ga-chart {
|
606 |
-
|
607 |
-
|
608 |
}
|
609 |
|
610 |
#ga_form .form-table {
|
611 |
-
|
612 |
}
|
613 |
|
614 |
.adBanner {
|
615 |
-
|
616 |
-
|
617 |
-
|
618 |
}
|
619 |
|
620 |
#adblocker-notice {
|
621 |
-
|
622 |
}
|
1 |
@CHARSET "UTF-8";
|
2 |
|
3 |
.wrap.ga-wrap {
|
4 |
+
margin: 0px auto !important;
|
5 |
+
margin-top: 10px !important;
|
6 |
+
margin-right: 0px !important;
|
7 |
+
font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
|
8 |
+
font-size: 14px;
|
9 |
+
line-height: 1.42857143;
|
10 |
+
color: #333333;
|
11 |
}
|
12 |
|
13 |
.ga_container {
|
14 |
+
margin-top: 25px;
|
15 |
}
|
16 |
|
17 |
.google-analytics_page_googleanalytics-settings .ga_container {
|
18 |
+
display: flex;
|
19 |
+
flex-wrap: wrap;
|
20 |
+
justify-content: space-between;
|
21 |
}
|
22 |
|
23 |
.ga_container .sidebar-ad {
|
24 |
+
width: 50%;
|
25 |
+
background: #fff;
|
26 |
+
padding: 16px;
|
27 |
+
box-shadow: 6px 7px 12px 6px #cdcdcd;
|
28 |
}
|
29 |
|
30 |
.ga_container .sidebar-ad img {
|
31 |
+
width: 100%;
|
32 |
}
|
33 |
|
34 |
.ga_container a.view-report {
|
35 |
+
background: #c6dafc;
|
36 |
+
width: 200px;
|
37 |
+
display: inline-block;
|
38 |
+
padding: 10px 20px;
|
39 |
+
border-radius: 5px;
|
40 |
+
text-decoration: none;
|
41 |
+
font-size: 15px;
|
42 |
+
font-weight: bold;
|
43 |
+
text-align: center;
|
44 |
+
margin: 10px 5px 10px 0;
|
45 |
}
|
46 |
|
47 |
.ga_container .filter-choices a,
|
48 |
+
.ga_container .filter-choices button {
|
49 |
+
background: #f9f9f9;
|
50 |
+
width: 105px;
|
51 |
+
display: inline-block;
|
52 |
+
padding: 10px 20px;
|
53 |
+
border-radius: 5px;
|
54 |
+
text-decoration: none;
|
55 |
+
font-size: 15px;
|
56 |
+
font-weight: bold;
|
57 |
+
text-align: center;
|
58 |
+
margin: 10px 5px 10px 0;
|
59 |
+
color: #888888;
|
|
|
60 |
}
|
61 |
|
62 |
.ga_container .filter-choices a.selected,
|
63 |
.ga_container .filter-choices button {
|
64 |
+
background: #c6dafc;
|
65 |
+
color: #353535;
|
66 |
}
|
67 |
|
68 |
.ga_container .filter-choices button {
|
69 |
+
padding: 5px 20px;
|
70 |
}
|
71 |
|
72 |
#exTab1, #exTab2 {
|
73 |
+
margin-right: 15px !important;
|
74 |
}
|
75 |
|
76 |
#exTab1 .tab-content {
|
77 |
+
color: white;
|
78 |
+
background-color: #428bca;
|
79 |
+
padding: 5px 15px;
|
80 |
}
|
81 |
|
82 |
#exTab2 h3 {
|
83 |
+
color: white;
|
84 |
+
background-color: #428bca;
|
85 |
+
padding: 5px 15px;
|
86 |
}
|
87 |
|
88 |
/* remove border radius for the tab */
|
89 |
#exTab1 .nav-pills > li > a {
|
90 |
+
border-radius: 0;
|
91 |
}
|
92 |
|
93 |
/* change border radius for the tab , apply corners on top*/
|
94 |
#exTab3 .nav-pills > li > a {
|
95 |
+
border-radius: 4px 4px 0 0;
|
96 |
}
|
97 |
|
98 |
#exTab3 .tab-content {
|
99 |
+
color: white;
|
100 |
+
background-color: #428bca;
|
101 |
+
padding: 5px 15px;
|
102 |
}
|
103 |
|
104 |
label.ga_checkbox_label {
|
105 |
+
margin-top: 6px !important;
|
106 |
}
|
107 |
|
108 |
.form-table th {
|
109 |
+
width: 250px !important;
|
110 |
}
|
111 |
|
112 |
.wrap.ga-notice {
|
113 |
+
width: 100% !important;
|
114 |
+
margin-left: 0px !important;
|
115 |
+
margin-right: 10px !important;
|
116 |
}
|
117 |
|
118 |
.ga_warning {
|
119 |
+
font-size: 12px;
|
120 |
+
font-weight: normal;
|
121 |
+
margin-top: 10px;
|
122 |
}
|
123 |
|
124 |
.ga-boxes-container {
|
126 |
}
|
127 |
|
128 |
.ga-box-row {
|
129 |
+
display: table;
|
130 |
+
width: 100%;
|
131 |
+
table-layout: fixed;
|
132 |
+
border-spacing: 10px;
|
133 |
}
|
134 |
|
135 |
.ga-box-column {
|
136 |
+
display: table-cell;
|
137 |
+
-moz-box-shadow: 0 0 5px #e5e5e5;
|
138 |
+
-webkit-box-shadow: 0 0 5px #e5e5e5;
|
139 |
+
box-shadow: 0px 0px 5px #e5e5e5;
|
140 |
}
|
141 |
|
142 |
.ga-box-dashboard {
|
143 |
+
border: 1px solid #cccccc;
|
144 |
+
border-radius: 0px;
|
145 |
+
padding: 3px;
|
146 |
+
text-align: center;
|
147 |
}
|
148 |
|
149 |
.ga-box-centered {
|
150 |
+
text-align: center;
|
151 |
}
|
152 |
|
153 |
.ga-loader-wrapper {
|
154 |
+
float: right;
|
155 |
+
margin-top: 4px;
|
156 |
+
margin-right: 5px;
|
157 |
}
|
158 |
|
159 |
.ga-loader-wrapper.stats-page {
|
160 |
+
width: 45px;
|
161 |
+
text-align: center;
|
162 |
+
margin: 0 auto;
|
163 |
+
float: none;
|
164 |
}
|
165 |
|
166 |
.ga-loader {
|
167 |
+
border: 4px solid #f3f3f3; /* Light grey */
|
168 |
+
border-top: 4px solid #3498db; /* Blue */
|
169 |
+
border-radius: 50%;
|
170 |
+
width: 15px;
|
171 |
+
height: 15px;
|
172 |
+
animation: spin 2s linear infinite;
|
173 |
+
display: none;
|
174 |
}
|
175 |
|
176 |
.ga-loader.stats-page-loader {
|
177 |
+
width: 45px;
|
178 |
+
height: 45px;
|
179 |
+
border-width: 6px;
|
180 |
}
|
181 |
|
182 |
@keyframes spin {
|
183 |
+
0% {
|
184 |
+
transform: rotate(0deg);
|
185 |
+
}
|
186 |
+
100% {
|
187 |
+
transform: rotate(360deg);
|
188 |
+
}
|
189 |
}
|
190 |
|
191 |
.ga-review-us {
|
192 |
+
position: fixed;
|
193 |
+
right: 10px;
|
194 |
+
bottom: 40px;
|
195 |
+
background: #fff;
|
196 |
+
border: solid 1px #3379b7;
|
197 |
+
border-radius: 10px;
|
198 |
+
padding: 15px;
|
199 |
+
width: 295px;
|
200 |
+
text-align: center;
|
201 |
}
|
202 |
|
203 |
.ga-review-us #close-review-us {
|
204 |
+
cursor: pointer;
|
205 |
}
|
206 |
|
207 |
.ga-review-us h3 {
|
208 |
+
color: #3379b7;
|
209 |
}
|
210 |
|
211 |
.ga-review-us h3 a {
|
212 |
+
color: #ff9801;
|
213 |
}
|
214 |
|
215 |
.ga-chart {
|
216 |
}
|
217 |
|
218 |
.label-grey {
|
219 |
+
color: #ccc;
|
220 |
}
|
221 |
|
222 |
.ga-tooltip {
|
223 |
+
position: relative;
|
224 |
+
cursor: not-allowed;
|
225 |
}
|
226 |
|
227 |
.ga-tooltip input[disabled] {
|
228 |
+
cursor: not-allowed;
|
229 |
}
|
230 |
|
231 |
.ga-tooltiptext {
|
232 |
+
background-color: #ffe692;
|
233 |
+
border: 1px solid #ffb900;
|
234 |
+
border-radius: 4px;
|
235 |
+
color: #444;
|
236 |
+
font-size: 12px;
|
237 |
+
font-weight: 500;
|
238 |
+
margin-left: 10px;
|
239 |
+
margin-top: 30px;
|
240 |
+
padding: 3px 10px;
|
241 |
+
position: relative;
|
242 |
+
white-space: nowrap;
|
243 |
+
text-align: center;
|
244 |
+
visibility: hidden;
|
245 |
+
width: auto;
|
246 |
+
z-index: 1;
|
247 |
}
|
248 |
|
249 |
.ga-tt-abs {
|
250 |
+
display: inline-block;
|
251 |
+
position: absolute;
|
252 |
+
margin-top: 0px;
|
253 |
}
|
254 |
|
255 |
.ga-tooltip:hover .ga-tooltiptext {
|
256 |
+
visibility: visible;
|
257 |
}
|
258 |
|
259 |
+
.weight-normal {
|
260 |
+
font-weight: normal;
|
261 |
}
|
262 |
|
263 |
.ga-love-text {
|
264 |
+
display: block;
|
265 |
+
margin-top: 20px;
|
266 |
+
font-size: 10px;
|
267 |
+
font-weight: bold;
|
268 |
}
|
269 |
|
270 |
+
.ga-debug-form-div {
|
271 |
+
margin: 5px;
|
272 |
}
|
273 |
|
274 |
.ga-debug-form-label {
|
275 |
+
vertical-align: top;
|
276 |
+
display: inline-block;
|
277 |
+
width: 20%;
|
278 |
}
|
279 |
|
280 |
.ga-debug-form-field {
|
281 |
+
width: 50%;
|
282 |
}
|
283 |
|
284 |
.ga-debug-form-loader {
|
285 |
+
width: 20%;
|
286 |
}
|
287 |
|
288 |
.demo-ad.ga-panel-default img {
|
289 |
+
opacity: .3;
|
290 |
+
background: #cdcdcd;
|
291 |
+
width: 100%;
|
292 |
}
|
293 |
|
294 |
.demo-enable-popup {
|
295 |
+
display: none;
|
296 |
+
position: fixed;
|
297 |
+
top: 50%;
|
298 |
+
left: 50%;
|
299 |
+
transform: translate(-50%, -50%);
|
300 |
+
background: #fff;
|
301 |
+
border: 2px solid #428aca;
|
302 |
+
padding: 15px;
|
303 |
+
width: 500px;
|
304 |
}
|
305 |
|
306 |
.demo-enable-popup.engage {
|
307 |
+
display: block;
|
308 |
}
|
309 |
|
310 |
.demo-enable-popup .close-demo-modal {
|
311 |
+
position: absolute;
|
312 |
+
right: 10px;
|
313 |
+
top: 10px;
|
314 |
+
border: 1px solid;
|
315 |
+
border-radius: 20px;
|
316 |
+
padding: 0 7px;
|
317 |
+
color: #fff;
|
318 |
+
background: #cdcdcd;
|
319 |
+
cursor: pointer;
|
320 |
}
|
321 |
|
322 |
.demo-enable-popup p {
|
323 |
+
font-size: 18px;
|
324 |
+
text-align: center;
|
325 |
+
padding: 0 20px 10px;
|
326 |
}
|
327 |
|
328 |
#sharethis-form-color {
|
329 |
+
display: flex;
|
330 |
+
flex-wrap: wrap;
|
331 |
+
margin: auto;
|
332 |
+
width: 50%;
|
333 |
}
|
334 |
|
335 |
#sharethis-form-color .color {
|
336 |
+
box-shadow: 1px 1px 4px 1px #cdcdcd;
|
337 |
+
cursor: pointer;
|
338 |
+
margin: 5px;
|
339 |
}
|
340 |
|
341 |
+
#sharethis-form-color .color.selected {
|
342 |
+
box-shadow: 0px 0px 3px 5px #4583ee;
|
343 |
}
|
344 |
|
345 |
#publisher-purpose .purpose-item {
|
346 |
+
margin-bottom: 25px;
|
347 |
}
|
348 |
|
349 |
#publisher-purpose .purpose-item div.title {
|
350 |
+
display: block;
|
351 |
+
text-align: left;
|
352 |
+
font-weight: bold;
|
353 |
+
width: 100%;
|
354 |
}
|
355 |
|
356 |
#publisher-purpose .purpose-item label {
|
357 |
+
display: inline-block;
|
358 |
+
width: 21%;
|
359 |
}
|
360 |
|
361 |
.gdpr-platform {
|
362 |
+
margin: 20px auto;
|
363 |
+
max-width: 900px;
|
364 |
+
background: #fff;
|
365 |
+
padding: 20px;
|
366 |
+
z-index: 999;
|
367 |
+
position: relative;
|
368 |
}
|
369 |
|
370 |
.gdpr-submit-button {
|
371 |
+
margin: 20px auto;
|
372 |
+
max-width: 900px;
|
373 |
+
z-index: 999;
|
374 |
+
position: relative;
|
375 |
}
|
376 |
|
377 |
.gdpr-platform #publisher-purpose .purpose-item label:first-of-type {
|
378 |
+
width: 14%;
|
379 |
}
|
380 |
|
381 |
+
.gdpr-platform .switch label input[type=radio]:checked + .lever,
|
382 |
+
.gdpr-platform .switch label input[type=checkbox]:checked + .lever {
|
383 |
+
background: #4583ee;
|
384 |
+
border: 2px solid #4583ee;
|
385 |
+
box-shadow: none;
|
386 |
}
|
387 |
|
388 |
.gdpr-platform input[type="text"] {
|
389 |
+
line-height: 40px;
|
390 |
+
margin-bottom: 10px;
|
391 |
+
width: 300px;
|
392 |
}
|
393 |
|
394 |
.gdpr-platform select {
|
395 |
+
margin-bottom: 10px;
|
396 |
+
line-height: 40px;
|
397 |
+
width: 300px;
|
398 |
}
|
399 |
|
400 |
+
.gdpr-platform .switch label input[type=radio]:checked + .lever:before,
|
401 |
+
.gdpr-platform .switch label input[type=checkbox]:checked + .lever:before {
|
402 |
+
content: "✓";
|
403 |
+
position: absolute;
|
404 |
+
top: 0;
|
405 |
+
left: 3px;
|
406 |
+
color: #fff;
|
407 |
}
|
408 |
|
409 |
.gdpr-platform .switch label {
|
410 |
+
font-size: 12px;
|
411 |
+
display: block;
|
412 |
+
margin-top: 10px;
|
413 |
}
|
414 |
|
415 |
.gdpr-platform .switch label .lever {
|
416 |
+
content: "";
|
417 |
+
display: inline-block;
|
418 |
+
position: relative;
|
419 |
+
width: 20px;
|
420 |
+
height: 18px;
|
421 |
+
background-color: #fff;
|
422 |
+
border: 1px solid #cdcdcd;
|
423 |
+
border-radius: 0;
|
424 |
+
margin-right: 10px;
|
425 |
+
transition: background .3s ease;
|
426 |
+
vertical-align: middle;
|
427 |
+
margin: 0 16px;
|
428 |
}
|
429 |
|
430 |
.gdpr-platform .switch label .lever:after {
|
431 |
+
border-radius: 0;
|
432 |
+
content: unset;
|
433 |
+
position: unset;
|
434 |
}
|
435 |
|
436 |
|
437 |
+
.gdpr-platform [type=radio].filled-in + label:before, .gdpr-platform [type=checkbox].filled-in + label:before {
|
438 |
+
content: "";
|
439 |
+
left: 0;
|
440 |
+
position: absolute;
|
441 |
+
transition: border .25s, background-color .25s, width .2s .1s, height .2s .1s, top .2s .1s, left .2s .1s;
|
442 |
+
z-index: 1;
|
443 |
}
|
444 |
|
445 |
p.form-color {
|
446 |
+
float: left;
|
447 |
+
width: 100%;
|
448 |
+
padding-top: 15px;
|
449 |
}
|
450 |
|
451 |
#sharethis-form-color {
|
452 |
+
display: flex;
|
453 |
+
flex-wrap: wrap;
|
454 |
+
margin: auto;
|
455 |
+
width: 50%;
|
456 |
}
|
457 |
|
458 |
#sharethis-form-color .color {
|
459 |
+
box-shadow: 1px 1px 4px 1px #cdcdcd;
|
460 |
+
cursor: pointer;
|
461 |
+
margin: 5px;
|
462 |
}
|
463 |
|
464 |
+
#sharethis-form-color .color.selected {
|
465 |
+
box-shadow: 0px 0px 3px 5px #4583ee;
|
466 |
}
|
467 |
|
468 |
.empty-choices {
|
469 |
+
display: flex;
|
470 |
+
justify-content: center;
|
471 |
+
opacity: 1;
|
472 |
+
transition: opacity .6s;
|
473 |
}
|
474 |
|
475 |
a.st-rc-link {
|
476 |
+
margin: 20px 0 0 10px;
|
477 |
}
|
478 |
|
479 |
.gdpr-platform a.st-rc-link {
|
480 |
+
background: #4583ee;
|
481 |
+
border-radius: 3px;
|
482 |
+
border: none;
|
483 |
+
color: #fff;
|
484 |
+
cursor: pointer;
|
485 |
+
margin: .8em auto .5em;
|
486 |
+
display: inline-block;
|
487 |
+
padding: 15px 60px;
|
488 |
+
letter-spacing: 0.1em;
|
489 |
+
text-align: center;
|
490 |
+
text-decoration: none;
|
491 |
+
transition: opacity 0.2s ease-out
|
492 |
}
|
493 |
|
494 |
.empty-choices a {
|
495 |
+
padding: 10px;
|
496 |
+
min-width: 250px;
|
497 |
}
|
498 |
|
499 |
.empty-choices a.st-rc-link {
|
500 |
+
margin: 20px 0 20px 10px;
|
501 |
}
|
502 |
|
503 |
.gdpr-platform .vendor-table-body {
|
504 |
+
border: solid 1px #cdcdcd;
|
505 |
+
padding: 10px;
|
506 |
+
max-height: 600px;
|
507 |
+
overflow: scroll;
|
508 |
}
|
509 |
|
510 |
.gdpr-platform .vendor-table-cell {
|
511 |
+
padding: 20px 0;
|
512 |
+
border-bottom: solid 1px #cdcdcd;
|
513 |
}
|
514 |
|
515 |
.gdpr-platform .purpose-item input[type="checkbox"],
|
516 |
.gdpr-platform .vendor-table-cell input[type="checkbox"],
|
517 |
+
.gdpr-platform .purpose-item input[type="radio"] {
|
518 |
+
display: none;
|
|
|
519 |
}
|
520 |
|
521 |
.gdpr-platform .exclusion-item {
|
522 |
+
padding: 20px 0;
|
523 |
+
border-bottom: solid 1px #cdcdcd;
|
524 |
}
|
525 |
|
526 |
.gdpr-platform label.enable-tool {
|
527 |
+
font-weight: bold;
|
528 |
+
font-size: 16px;
|
529 |
+
margin-bottom: 20px;
|
530 |
}
|
531 |
|
532 |
.gdpr-platform h2 {
|
533 |
+
text-align: center;
|
534 |
}
|
535 |
|
536 |
.gdpr-platform .error-message {
|
537 |
+
display: block;
|
538 |
+
text-align: left;
|
539 |
}
|
540 |
|
541 |
.gdpr-platform .gdpr-landing img {
|
542 |
+
margin: auto;
|
543 |
+
width: 600px;
|
544 |
+
display: block;
|
545 |
}
|
546 |
|
547 |
.register-section {
|
548 |
+
text-align: center;
|
549 |
+
padding: 30px 20px;
|
550 |
}
|
551 |
|
552 |
.register-section button {
|
553 |
+
background-color: #4583ee;
|
554 |
+
color: #fff;
|
555 |
+
padding: 10px 15px;
|
556 |
+
border: none;
|
557 |
+
border-radius: 5px;
|
558 |
}
|
559 |
|
560 |
.accor-wrap {
|
561 |
+
margin: 1rem 0 0;
|
562 |
+
display: inline-block;
|
563 |
+
width: 100%;
|
564 |
}
|
565 |
|
566 |
.accor-wrap .accor-tab {
|
567 |
+
background: #4582ec;
|
568 |
+
padding: .5rem;
|
569 |
+
border-radius: 5px;
|
570 |
+
color: #ffffff;
|
571 |
}
|
572 |
|
573 |
.accor-wrap .well {
|
574 |
+
display: inline-block;
|
575 |
+
width: 100%;
|
576 |
}
|
577 |
|
578 |
.accor-wrap .well h3 {
|
579 |
+
margin: 1rem 0;
|
580 |
+
padding-top: 20px;
|
581 |
+
text-align: center;
|
582 |
+
width: 100%;
|
583 |
}
|
584 |
|
585 |
.accor-wrap .well .col-md-12:first-of-type h3 {
|
586 |
+
margin-top: 0;
|
587 |
}
|
588 |
|
589 |
.accor-wrap .accor-content {
|
590 |
+
display: none;
|
591 |
}
|
592 |
|
593 |
.accor-wrap .accor-arrow {
|
594 |
+
border: 1px solid #ffffff;
|
595 |
+
padding: .2rem .4rem;
|
596 |
+
border-radius: 5px;
|
597 |
+
margin: 0 .3rem 0 .3rem;
|
598 |
+
font-size: 12px;
|
599 |
+
cursor: pointer;
|
600 |
+
font-family: arial, sans-serif;
|
601 |
}
|
602 |
|
603 |
.ga-demo-chart .ga-chart {
|
604 |
+
display: inline-block;
|
605 |
+
width: 46%;
|
606 |
}
|
607 |
|
608 |
#ga_form .form-table {
|
609 |
+
max-width: 560px;
|
610 |
}
|
611 |
|
612 |
.adBanner {
|
613 |
+
background-color: transparent;
|
614 |
+
height: 1px;
|
615 |
+
width: 1px;
|
616 |
}
|
617 |
|
618 |
#adblocker-notice {
|
619 |
+
display: none;
|
620 |
}
|
googleanalytics.php
CHANGED
@@ -1,55 +1,69 @@
|
|
1 |
<?php
|
2 |
-
|
3 |
* Plugin Name: ShareThis Dashboard for Google Analytics
|
4 |
* Plugin URI: http://wordpress.org/extend/plugins/googleanalytics/
|
5 |
* Description: Use Google Analytics on your WordPress site without touching any code, and view visitor reports right in your WordPress admin dashboard!
|
6 |
-
* Version: 2.5.
|
7 |
* Author: ShareThis
|
8 |
* Author URI: http://sharethis.com
|
|
|
|
|
9 |
*/
|
10 |
|
11 |
-
if ( !defined( 'WP_CONTENT_URL' ) ) {
|
12 |
define( 'WP_CONTENT_URL', get_option( 'siteurl' ) . '/wp-content' );
|
13 |
}
|
14 |
-
if ( !defined( 'WP_CONTENT_DIR' ) ) {
|
15 |
define( 'WP_CONTENT_DIR', ABSPATH . 'wp-content' );
|
16 |
}
|
17 |
-
if ( !defined( 'WP_PLUGIN_URL' ) ) {
|
18 |
define( 'WP_PLUGIN_URL', WP_CONTENT_URL . '/plugins' );
|
19 |
}
|
20 |
-
if ( !defined( 'WP_PLUGIN_DIR' ) ) {
|
21 |
define( 'WP_PLUGIN_DIR', WP_CONTENT_DIR . '/plugins' );
|
22 |
}
|
23 |
-
if ( !defined( 'GA_NAME' ) ) {
|
24 |
define( 'GA_NAME', 'googleanalytics' );
|
25 |
}
|
26 |
-
if ( !defined( 'GA_PLUGIN_DIR' ) ) {
|
27 |
define( 'GA_PLUGIN_DIR', WP_PLUGIN_DIR . '/' . GA_NAME );
|
28 |
}
|
29 |
-
if ( !defined( 'GA_PLUGIN_URL' ) ) {
|
30 |
define( 'GA_PLUGIN_URL', WP_PLUGIN_URL . '/' . GA_NAME );
|
31 |
}
|
32 |
-
if ( !defined( 'GA_MAIN_FILE_PATH' ) ) {
|
33 |
define( 'GA_MAIN_FILE_PATH', __FILE__ );
|
34 |
}
|
35 |
-
if ( !defined( 'GA_SHARETHIS_SCRIPTS_INCLUDED' ) ) {
|
36 |
define( 'GA_SHARETHIS_SCRIPTS_INCLUDED', 0 );
|
37 |
}
|
38 |
|
39 |
/**
|
40 |
* Prevent to launch the plugin within different plugin dir name
|
41 |
*/
|
42 |
-
if (
|
43 |
-
echo
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
44 |
|
45 |
// To make able the message above to be displayed in the activation error notice.
|
46 |
die();
|
47 |
}
|
48 |
|
49 |
-
|
50 |
-
|
51 |
-
|
52 |
-
|
|
|
|
|
|
|
|
|
53 |
Ga_Autoloader::register();
|
54 |
Ga_Hook::add_hooks( GA_MAIN_FILE_PATH );
|
55 |
|
1 |
<?php
|
2 |
+
/**
|
3 |
* Plugin Name: ShareThis Dashboard for Google Analytics
|
4 |
* Plugin URI: http://wordpress.org/extend/plugins/googleanalytics/
|
5 |
* Description: Use Google Analytics on your WordPress site without touching any code, and view visitor reports right in your WordPress admin dashboard!
|
6 |
+
* Version: 2.5.5
|
7 |
* Author: ShareThis
|
8 |
* Author URI: http://sharethis.com
|
9 |
+
*
|
10 |
+
* @package GoogleAnalytics
|
11 |
*/
|
12 |
|
13 |
+
if ( ! defined( 'WP_CONTENT_URL' ) ) {
|
14 |
define( 'WP_CONTENT_URL', get_option( 'siteurl' ) . '/wp-content' );
|
15 |
}
|
16 |
+
if ( ! defined( 'WP_CONTENT_DIR' ) ) {
|
17 |
define( 'WP_CONTENT_DIR', ABSPATH . 'wp-content' );
|
18 |
}
|
19 |
+
if ( ! defined( 'WP_PLUGIN_URL' ) ) {
|
20 |
define( 'WP_PLUGIN_URL', WP_CONTENT_URL . '/plugins' );
|
21 |
}
|
22 |
+
if ( ! defined( 'WP_PLUGIN_DIR' ) ) {
|
23 |
define( 'WP_PLUGIN_DIR', WP_CONTENT_DIR . '/plugins' );
|
24 |
}
|
25 |
+
if ( ! defined( 'GA_NAME' ) ) {
|
26 |
define( 'GA_NAME', 'googleanalytics' );
|
27 |
}
|
28 |
+
if ( ! defined( 'GA_PLUGIN_DIR' ) ) {
|
29 |
define( 'GA_PLUGIN_DIR', WP_PLUGIN_DIR . '/' . GA_NAME );
|
30 |
}
|
31 |
+
if ( ! defined( 'GA_PLUGIN_URL' ) ) {
|
32 |
define( 'GA_PLUGIN_URL', WP_PLUGIN_URL . '/' . GA_NAME );
|
33 |
}
|
34 |
+
if ( ! defined( 'GA_MAIN_FILE_PATH' ) ) {
|
35 |
define( 'GA_MAIN_FILE_PATH', __FILE__ );
|
36 |
}
|
37 |
+
if ( ! defined( 'GA_SHARETHIS_SCRIPTS_INCLUDED' ) ) {
|
38 |
define( 'GA_SHARETHIS_SCRIPTS_INCLUDED', 0 );
|
39 |
}
|
40 |
|
41 |
/**
|
42 |
* Prevent to launch the plugin within different plugin dir name
|
43 |
*/
|
44 |
+
if ( false === preg_match( '/(\/|\\\)' . GA_NAME . '(\/|\\\)/', realpath( __FILE__ ), $test ) ) {
|
45 |
+
echo esc_html(
|
46 |
+
sprintf(
|
47 |
+
/* translators: %s refers to the Google Analytics directory name. */
|
48 |
+
__(
|
49 |
+
'Invalid plugin installation directory. Please verify if the plugin\'s dir name is equal to "%s".'
|
50 |
+
),
|
51 |
+
esc_attr( GA_NAME )
|
52 |
+
)
|
53 |
+
);
|
54 |
|
55 |
// To make able the message above to be displayed in the activation error notice.
|
56 |
die();
|
57 |
}
|
58 |
|
59 |
+
const GOOGLEANALYTICS_VERSION = '2.5.5';
|
60 |
+
|
61 |
+
// Requires.
|
62 |
+
require_once GA_PLUGIN_DIR . '/overwrite/ga-overwrite.php';
|
63 |
+
require_once GA_PLUGIN_DIR . '/class/class-ga-autoloader.php';
|
64 |
+
require_once GA_PLUGIN_DIR . '/class/class-ga-autoloader.php';
|
65 |
+
require_once GA_PLUGIN_DIR . '/tools/class-ga-supportlogger.php';
|
66 |
+
|
67 |
Ga_Autoloader::register();
|
68 |
Ga_Hook::add_hooks( GA_MAIN_FILE_PATH );
|
69 |
|
js/googleanalytics.js
CHANGED
@@ -1,28 +1,30 @@
|
|
1 |
/**
|
2 |
-
*
|
|
|
|
|
3 |
*/
|
4 |
|
5 |
(function ($) {
|
6 |
-
|
7 |
-
|
8 |
-
|
9 |
-
|
10 |
-
|
11 |
-
|
12 |
-
|
13 |
-
|
14 |
|
15 |
-
|
16 |
-
|
17 |
-
|
18 |
-
|
19 |
-
|
20 |
-
|
21 |
-
|
22 |
-
|
23 |
-
|
24 |
-
|
25 |
-
|
26 |
-
|
27 |
-
|
28 |
-
})(jQuery);
|
1 |
/**
|
2 |
+
* Google Analytics loader script.
|
3 |
+
*
|
4 |
+
* @package GoogleAnalytics
|
5 |
*/
|
6 |
|
7 |
(function ($) {
|
8 |
+
ga_loader = {
|
9 |
+
show: function () {
|
10 |
+
$( '.ga-loader' ).show();
|
11 |
+
},
|
12 |
+
hide: function () {
|
13 |
+
$( '.ga-loader' ).hide();
|
14 |
+
}
|
15 |
+
};
|
16 |
|
17 |
+
ga_tools = {
|
18 |
+
getCurrentWidth: function (wrapperSelector) {
|
19 |
+
return $( wrapperSelector ).width();
|
20 |
+
},
|
21 |
+
recomputeChartWidth: function (minWidth, offset, wrapperSelector) {
|
22 |
+
const currentWidth = ga_tools.getCurrentWidth( wrapperSelector );
|
23 |
+
if (currentWidth >= minWidth) {
|
24 |
+
return parseInt( currentWidth - offset );
|
25 |
+
} else {
|
26 |
+
return minWidth;
|
27 |
+
}
|
28 |
+
}
|
29 |
+
};
|
30 |
+
})( jQuery );
|
js/googleanalytics_createprop.js
CHANGED
@@ -1,35 +1,52 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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 |
)( window.jQuery, window.wp );
|
1 |
+
/**
|
2 |
+
* GoogleAnalytics CreateProp JS.
|
3 |
+
*
|
4 |
+
* @package GoogleAnalytics
|
5 |
+
*/
|
6 |
+
|
7 |
(
|
8 |
+
function ( $, wp ) {
|
9 |
+
$( document ).ready(
|
10 |
+
function () {
|
11 |
+
var theData = JSON.stringify(
|
12 |
+
{
|
13 |
+
onboarding_product: 'ga',
|
14 |
+
domain: gasiteURL,
|
15 |
+
email: gaAdminEmail,
|
16 |
+
is_wordpress: true
|
17 |
+
}
|
18 |
+
);
|
19 |
|
20 |
+
$.ajax(
|
21 |
+
{
|
22 |
+
url: 'https://platform-api.sharethis.com/v1.0/property',
|
23 |
+
method: 'POST',
|
24 |
+
async: false,
|
25 |
+
contentType: 'application/json; charset=utf-8',
|
26 |
+
data: theData,
|
27 |
+
success: function ( result ) {
|
28 |
+
setGACredentials( result.secret, result._id );
|
29 |
+
}
|
30 |
+
}
|
31 |
+
);
|
32 |
+
}
|
33 |
+
);
|
34 |
|
35 |
+
/**
|
36 |
+
* WP Ajax call to set prop id/secret
|
37 |
+
*/
|
38 |
+
function setGACredentials(secret, propid) {
|
39 |
+
wp.ajax.post(
|
40 |
+
'set_ga_credentials',
|
41 |
+
{
|
42 |
+
secret: secret,
|
43 |
+
propid: propid,
|
44 |
+
nonce: gaNonce
|
45 |
+
}
|
46 |
+
).always(
|
47 |
+
function( results ) {
|
48 |
+
}
|
49 |
+
);
|
50 |
+
}
|
51 |
+
}
|
52 |
)( window.jQuery, window.wp );
|
js/googleanalytics_dashboard.js
CHANGED
@@ -1,207 +1,263 @@
|
|
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 |
-
|
168 |
-
|
169 |
-
|
170 |
-
|
171 |
-
|
172 |
-
|
173 |
-
|
174 |
-
|
175 |
-
|
176 |
-
|
177 |
-
|
178 |
-
|
179 |
-
|
180 |
-
|
181 |
-
|
182 |
-
|
183 |
-
|
184 |
-
|
185 |
-
|
186 |
-
|
187 |
-
|
188 |
-
|
189 |
-
|
190 |
-
|
191 |
-
|
192 |
-
|
193 |
-
|
194 |
-
|
195 |
-
|
196 |
-
|
197 |
-
|
198 |
-
|
199 |
-
|
200 |
-
|
201 |
-
|
202 |
-
|
203 |
-
|
204 |
-
|
205 |
-
|
206 |
-
|
207 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
/**
|
2 |
+
* GoogleAnalytics Dashboard JS.
|
3 |
+
*
|
4 |
+
* @package GoogleAnalytics
|
5 |
+
*/
|
6 |
|
7 |
+
(function ($) {
|
8 |
+
const wrapperSelector = '#ga-dashboard-widget';
|
9 |
+
const minWidth = 350;
|
10 |
+
const offset = 10;
|
11 |
+
|
12 |
+
ga_dashboard = {
|
13 |
+
chartData: [],
|
14 |
+
init: function (dataArr, showLoader) {
|
15 |
+
if (showLoader) {
|
16 |
+
ga_loader.show();
|
17 |
+
}
|
18 |
+
google.charts.load( 'current', {'packages': ['corechart']} );
|
19 |
+
google.charts.setOnLoadCallback(
|
20 |
+
function () {
|
21 |
+
if (dataArr) {
|
22 |
+
ga_dashboard.drawChart( dataArr );
|
23 |
+
ga_dashboard.setChartData( dataArr );
|
24 |
+
}
|
25 |
+
}
|
26 |
+
);
|
27 |
+
},
|
28 |
+
events: function (data) {
|
29 |
+
$( document ).ready(
|
30 |
+
function () {
|
31 |
+
$( '#range-selector' ).on(
|
32 |
+
'change',
|
33 |
+
function () {
|
34 |
+
const selected = $( this ).val();
|
35 |
+
const selected_name = $( '#metrics-selector option:selected' ).html();
|
36 |
+
const selected_metric = $( '#metrics-selector option:selected' ).val() || null;
|
37 |
+
|
38 |
+
ga_loader.show();
|
39 |
+
|
40 |
+
var dataObj = {};
|
41 |
+
dataObj['action'] = "ga_ajax_data_change";
|
42 |
+
dataObj['date_range'] = selected;
|
43 |
+
dataObj['metric'] = selected_metric;
|
44 |
+
dataObj[GA_NONCE_FIELD] = GA_NONCE;
|
45 |
+
|
46 |
+
$.ajax(
|
47 |
+
{
|
48 |
+
type: "post",
|
49 |
+
dataType: "json",
|
50 |
+
url: ajaxurl,
|
51 |
+
data: dataObj,
|
52 |
+
success: function (response) {
|
53 |
+
|
54 |
+
ga_loader.hide();
|
55 |
+
|
56 |
+
if (typeof response.error !== "undefined") {
|
57 |
+
$( '#ga_widget_error' )
|
58 |
+
.removeClass( 'hidden' )
|
59 |
+
.html( `GA Dashboard: ${response.error}` );
|
60 |
+
} else {
|
61 |
+
var dataT = [['Day', selected_name]];
|
62 |
+
$.each(
|
63 |
+
response.chart,
|
64 |
+
function (k, v) {
|
65 |
+
dataT.push( [v.day, parseInt( v.current )] );
|
66 |
+
}
|
67 |
+
);
|
68 |
+
|
69 |
+
$.each(
|
70 |
+
response.boxes,
|
71 |
+
function (k, v) {
|
72 |
+
$( '#ga_box_dashboard_label_' + k ).html( v.label )
|
73 |
+
$( '#ga_box_dashboard_value_' + k ).html( v.value );
|
74 |
+
}
|
75 |
+
);
|
76 |
+
|
77 |
+
ga_dashboard.drawChart( dataT, selected_name );
|
78 |
+
|
79 |
+
// Set new data.
|
80 |
+
ga_dashboard.setChartData( dataT );
|
81 |
+
}
|
82 |
+
}
|
83 |
+
}
|
84 |
+
);
|
85 |
+
}
|
86 |
+
);
|
87 |
+
|
88 |
+
$( '#metrics-selector' ).on(
|
89 |
+
'change',
|
90 |
+
function () {
|
91 |
+
const selected = $( this ).val();
|
92 |
+
const selected_name = $( '#metrics-selector option:selected' ).html();
|
93 |
+
const selected_range = $( '#range-selector option:selected' ).val() || null;
|
94 |
+
|
95 |
+
ga_loader.show();
|
96 |
+
|
97 |
+
var dataObj = {};
|
98 |
+
dataObj['action'] = "ga_ajax_data_change";
|
99 |
+
dataObj['metric'] = selected;
|
100 |
+
dataObj['date_range'] = selected_range;
|
101 |
+
dataObj[GA_NONCE_FIELD] = GA_NONCE;
|
102 |
+
|
103 |
+
$.ajax(
|
104 |
+
{
|
105 |
+
type: "post",
|
106 |
+
dataType: "json",
|
107 |
+
url: ajaxurl,
|
108 |
+
data: dataObj,
|
109 |
+
success: function (response) {
|
110 |
+
ga_loader.hide();
|
111 |
+
|
112 |
+
if (typeof response.error !== "undefined") {
|
113 |
+
$( '#ga_widget_error' )
|
114 |
+
.removeClass( 'hidden' )
|
115 |
+
.html( `GA Dashboard: ${response.error}` );
|
116 |
+
} else {
|
117 |
+
var dataT = [['Day', selected_name]];
|
118 |
+
$.each(
|
119 |
+
response.chart,
|
120 |
+
function (k, v) {
|
121 |
+
dataT.push( [v.day, parseInt( v.current )] );
|
122 |
+
}
|
123 |
+
);
|
124 |
+
|
125 |
+
ga_dashboard.drawChart( dataT, selected_name );
|
126 |
+
|
127 |
+
// Set new data.
|
128 |
+
ga_dashboard.setChartData( dataT );
|
129 |
+
}
|
130 |
+
}
|
131 |
+
}
|
132 |
+
);
|
133 |
+
}
|
134 |
+
);
|
135 |
+
|
136 |
+
$( '#ga-widget-trigger' ).on(
|
137 |
+
'click',
|
138 |
+
function () {
|
139 |
+
const selected_name = $( '#metrics-selector option:selected' ).html();
|
140 |
+
const selected_metric = $( '#metrics-selector option:selected' ).val() || null;
|
141 |
+
const selected_range = $( '#range-selector option:selected' ).val() || null;
|
142 |
+
|
143 |
+
ga_loader.show();
|
144 |
+
|
145 |
+
var dataObj = {};
|
146 |
+
dataObj['action'] = "ga_ajax_data_change";
|
147 |
+
dataObj['metric'] = selected_metric;
|
148 |
+
dataObj['date_range'] = selected_range;
|
149 |
+
dataObj[GA_NONCE_FIELD] = GA_NONCE;
|
150 |
+
|
151 |
+
$.ajax(
|
152 |
+
{
|
153 |
+
type: "post",
|
154 |
+
dataType: "json",
|
155 |
+
url: ajaxurl,
|
156 |
+
data: dataObj,
|
157 |
+
success: function (response) {
|
158 |
+
|
159 |
+
ga_loader.hide();
|
160 |
+
|
161 |
+
if (typeof response.error !== "undefined") {
|
162 |
+
$( '#ga_widget_error' )
|
163 |
+
.removeClass( 'hidden' )
|
164 |
+
.html( `GA Dashboard: ${response.error}` );
|
165 |
+
} else {
|
166 |
+
var dataT = [['Day', selected_name]];
|
167 |
+
$.each(
|
168 |
+
response.chart,
|
169 |
+
function (k, v) {
|
170 |
+
dataT.push( [v.day, parseInt( v.current )] );
|
171 |
+
}
|
172 |
+
);
|
173 |
+
|
174 |
+
$.each(
|
175 |
+
response.boxes,
|
176 |
+
function (k, v) {
|
177 |
+
$( '#ga_box_dashboard_label_' + k ).html( v.label )
|
178 |
+
$( '#ga_box_dashboard_value_' + k ).html( v.value );
|
179 |
+
}
|
180 |
+
);
|
181 |
+
|
182 |
+
ga_dashboard.drawChart( dataT, selected_name );
|
183 |
+
|
184 |
+
// Set new data.
|
185 |
+
ga_dashboard.setChartData( dataT );
|
186 |
+
}
|
187 |
+
}
|
188 |
+
}
|
189 |
+
);
|
190 |
+
}
|
191 |
+
);
|
192 |
+
|
193 |
+
$( window ).on(
|
194 |
+
'resize',
|
195 |
+
function () {
|
196 |
+
ga_dashboard.drawChart( ga_dashboard.getChartData(), ga_tools.recomputeChartWidth( minWidth, offset, wrapperSelector ) );
|
197 |
+
}
|
198 |
+
);
|
199 |
+
}
|
200 |
+
);
|
201 |
+
},
|
202 |
+
/**
|
203 |
+
* Returns chart data array.
|
204 |
+
*
|
205 |
+
* @returns {Array}
|
206 |
+
*/
|
207 |
+
getChartData: function () {
|
208 |
+
return ga_dashboard.chartData;
|
209 |
+
},
|
210 |
+
/**
|
211 |
+
* Overwrites initial data array.
|
212 |
+
*
|
213 |
+
* @param new_data
|
214 |
+
*/
|
215 |
+
setChartData: function (new_data) {
|
216 |
+
ga_dashboard.chartData = new_data;
|
217 |
+
},
|
218 |
+
drawChart: function (dataArr, title) {
|
219 |
+
const chart_dom_element = document.getElementById( 'chart_div' );
|
220 |
+
|
221 |
+
if (typeof title == 'undefined') {
|
222 |
+
title = 'Pageviews';
|
223 |
+
}
|
224 |
+
|
225 |
+
if (dataArr.length > 1) {
|
226 |
+
const data = google.visualization.arrayToDataTable( dataArr );
|
227 |
+
|
228 |
+
const options = {
|
229 |
+
/*title: title,*/
|
230 |
+
legend: 'top',
|
231 |
+
lineWidth: 2,
|
232 |
+
chartArea: {
|
233 |
+
left: 10,
|
234 |
+
top: 60,
|
235 |
+
bottom: 50,
|
236 |
+
right: 10
|
237 |
+
|
238 |
+
},
|
239 |
+
width: '95%',
|
240 |
+
height: 300,
|
241 |
+
hAxis: {title: 'Day', titleTextStyle: {color: '#333'}, direction: 1},
|
242 |
+
vAxis: {minValue: 0},
|
243 |
+
pointSize: 5
|
244 |
+
};
|
245 |
+
|
246 |
+
var chart = new google.visualization.AreaChart( chart_dom_element );
|
247 |
+
google.visualization.events.addListener(
|
248 |
+
chart,
|
249 |
+
'ready',
|
250 |
+
function () {
|
251 |
+
ga_loader.hide();
|
252 |
+
}
|
253 |
+
);
|
254 |
+
chart.draw( data, options );
|
255 |
+
} else {
|
256 |
+
$( '#ga_widget_error' )
|
257 |
+
.removeClass( 'hidden' )
|
258 |
+
.html( 'GA Dashboard: No data available for selected range.' );
|
259 |
+
}
|
260 |
+
}
|
261 |
+
};
|
262 |
+
|
263 |
+
})( jQuery );
|
js/googleanalytics_page.js
CHANGED
@@ -1,679 +1,854 @@
|
|
1 |
-
|
2 |
-
|
3 |
-
|
4 |
-
|
5 |
-
|
6 |
-
|
7 |
-
const
|
8 |
-
const
|
9 |
-
const
|
10 |
-
const
|
11 |
-
const
|
12 |
-
const
|
|
|
|
|
|
|
|
|
|
|
|
|
13 |
const GA_AUTHENTICATION_CODE_ERROR = 'That looks like your Google Analytics Tracking ID. Please enter the authentication token in this space. See here for <a href="https://cl.ly/1y1N1A3h0s1t" target="_blank">a walkthrough</a> of how to do it.';
|
14 |
|
15 |
-
(function
|
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 |
-
|
168 |
-
|
169 |
-
|
170 |
-
|
171 |
-
|
172 |
-
|
173 |
-
|
174 |
-
|
175 |
-
|
176 |
-
|
177 |
-
|
178 |
-
|
179 |
-
|
180 |
-
|
181 |
-
|
182 |
-
|
183 |
-
|
184 |
-
|
185 |
-
|
186 |
-
|
187 |
-
|
188 |
-
|
189 |
-
|
190 |
-
|
191 |
-
|
192 |
-
|
193 |
-
|
194 |
-
|
195 |
-
|
196 |
-
|
197 |
-
|
198 |
-
|
199 |
-
|
200 |
-
|
201 |
-
|
202 |
-
|
203 |
-
|
204 |
-
|
205 |
-
|
206 |
-
|
207 |
-
|
208 |
-
|
209 |
-
|
210 |
-
|
211 |
-
|
212 |
-
|
213 |
-
|
214 |
-
|
215 |
-
|
216 |
-
|
217 |
-
|
218 |
-
|
219 |
-
|
220 |
-
|
221 |
-
|
222 |
-
|
223 |
-
|
224 |
-
|
225 |
-
|
226 |
-
|
227 |
-
|
228 |
-
|
229 |
-
|
230 |
-
|
231 |
-
|
232 |
-
|
233 |
-
|
234 |
-
|
235 |
-
|
236 |
-
|
237 |
-
|
238 |
-
|
239 |
-
|
240 |
-
|
241 |
-
|
242 |
-
|
243 |
-
|
244 |
-
|
245 |
-
|
246 |
-
|
247 |
-
|
248 |
-
|
249 |
-
|
250 |
-
|
251 |
-
|
252 |
-
|
253 |
-
|
254 |
-
|
255 |
-
|
256 |
-
|
257 |
-
|
258 |
-
|
259 |
-
|
260 |
-
|
261 |
-
|
262 |
-
|
263 |
-
|
264 |
-
|
265 |
-
|
266 |
-
|
267 |
-
|
268 |
-
|
269 |
-
|
270 |
-
|
271 |
-
|
272 |
-
|
273 |
-
|
274 |
-
|
275 |
-
|
276 |
-
|
277 |
-
|
278 |
-
|
279 |
-
|
280 |
-
|
281 |
-
|
282 |
-
|
283 |
-
|
284 |
-
|
285 |
-
|
286 |
-
|
287 |
-
|
288 |
-
|
289 |
-
|
290 |
-
|
291 |
-
|
292 |
-
|
293 |
-
|
294 |
-
|
295 |
-
|
296 |
-
|
297 |
-
|
298 |
-
|
299 |
-
|
300 |
-
|
301 |
-
|
302 |
-
|
303 |
-
|
304 |
-
|
305 |
-
|
306 |
-
|
307 |
-
|
308 |
-
|
309 |
-
|
310 |
-
|
311 |
-
|
312 |
-
|
313 |
-
|
314 |
-
|
315 |
-
|
316 |
-
|
317 |
-
|
318 |
-
|
319 |
-
|
320 |
-
|
321 |
-
|
322 |
-
|
323 |
-
|
324 |
-
|
325 |
-
|
326 |
-
|
327 |
-
|
328 |
-
|
329 |
-
|
330 |
-
|
331 |
-
|
332 |
-
|
333 |
-
|
334 |
-
|
335 |
-
|
336 |
-
|
337 |
-
|
338 |
-
|
339 |
-
|
340 |
-
|
341 |
-
|
342 |
-
|
343 |
-
|
344 |
-
|
345 |
-
|
346 |
-
|
347 |
-
|
348 |
-
|
349 |
-
|
350 |
-
|
351 |
-
|
352 |
-
|
353 |
-
|
354 |
-
|
355 |
-
|
356 |
-
|
357 |
-
|
358 |
-
|
359 |
-
|
360 |
-
|
361 |
-
|
362 |
-
|
363 |
-
|
364 |
-
|
365 |
-
|
366 |
-
|
367 |
-
|
368 |
-
|
369 |
-
|
370 |
-
|
371 |
-
|
372 |
-
|
373 |
-
|
374 |
-
|
375 |
-
|
376 |
-
|
377 |
-
|
378 |
-
|
379 |
-
|
380 |
-
|
381 |
-
|
382 |
-
|
383 |
-
|
384 |
-
|
385 |
-
|
386 |
-
|
387 |
-
|
388 |
-
|
389 |
-
|
390 |
-
|
391 |
-
|
392 |
-
|
393 |
-
|
394 |
-
|
395 |
-
|
396 |
-
|
397 |
-
|
398 |
-
|
399 |
-
|
400 |
-
|
401 |
-
|
402 |
-
|
403 |
-
|
404 |
-
|
405 |
-
|
406 |
-
|
407 |
-
|
408 |
-
|
409 |
-
|
410 |
-
|
411 |
-
|
412 |
-
|
413 |
-
|
414 |
-
|
415 |
-
|
416 |
-
|
417 |
-
|
418 |
-
|
419 |
-
|
420 |
-
|
421 |
-
|
422 |
-
|
423 |
-
|
424 |
-
|
425 |
-
|
426 |
-
|
427 |
-
|
428 |
-
|
429 |
-
|
430 |
-
|
431 |
-
|
432 |
-
|
433 |
-
|
434 |
-
|
435 |
-
|
436 |
-
|
437 |
-
|
438 |
-
|
439 |
-
|
440 |
-
|
441 |
-
|
442 |
-
|
443 |
-
|
444 |
-
|
445 |
-
|
446 |
-
|
447 |
-
|
448 |
-
|
449 |
-
|
450 |
-
|
451 |
-
|
452 |
-
|
453 |
-
|
454 |
-
|
455 |
-
|
456 |
-
|
457 |
-
|
458 |
-
|
459 |
-
|
460 |
-
|
461 |
-
|
462 |
-
|
463 |
-
|
464 |
-
|
465 |
-
|
466 |
-
|
467 |
-
|
468 |
-
|
469 |
-
|
470 |
-
|
471 |
-
|
472 |
-
|
473 |
-
|
474 |
-
|
475 |
-
|
476 |
-
|
477 |
-
|
478 |
-
|
479 |
-
|
480 |
-
|
481 |
-
|
482 |
-
|
483 |
-
|
484 |
-
|
485 |
-
|
486 |
-
|
487 |
-
|
488 |
-
|
489 |
-
|
490 |
-
|
491 |
-
|
492 |
-
|
493 |
-
|
494 |
-
|
495 |
-
|
496 |
-
|
497 |
-
|
498 |
-
|
499 |
-
|
500 |
-
|
501 |
-
|
502 |
-
|
503 |
-
|
504 |
-
|
505 |
-
|
506 |
-
|
507 |
-
|
508 |
-
|
509 |
-
|
510 |
-
|
511 |
-
|
512 |
-
|
513 |
-
|
514 |
-
|
515 |
-
|
516 |
-
|
517 |
-
|
518 |
-
|
519 |
-
|
520 |
-
|
521 |
-
|
522 |
-
|
523 |
-
|
524 |
-
|
525 |
-
|
526 |
-
|
527 |
-
|
528 |
-
|
529 |
-
|
530 |
-
|
531 |
-
|
532 |
-
|
533 |
-
|
534 |
-
|
535 |
-
|
536 |
-
|
537 |
-
|
538 |
-
|
539 |
-
|
540 |
-
|
541 |
-
|
542 |
-
|
543 |
-
|
544 |
-
|
545 |
-
|
546 |
-
|
547 |
-
|
548 |
-
|
549 |
-
|
550 |
-
|
551 |
-
|
552 |
-
|
553 |
-
|
554 |
-
|
555 |
-
|
556 |
-
|
557 |
-
|
558 |
-
|
559 |
-
|
560 |
-
|
561 |
-
|
562 |
-
|
563 |
-
|
564 |
-
|
565 |
-
|
566 |
-
|
567 |
-
|
568 |
-
|
569 |
-
|
570 |
-
|
571 |
-
|
572 |
-
|
573 |
-
|
574 |
-
|
575 |
-
|
576 |
-
|
577 |
-
|
578 |
-
|
579 |
-
|
580 |
-
|
581 |
-
|
582 |
-
|
583 |
-
|
584 |
-
|
585 |
-
|
586 |
-
|
587 |
-
|
588 |
-
|
589 |
-
|
590 |
-
|
591 |
-
|
592 |
-
|
593 |
-
|
594 |
-
|
595 |
-
|
596 |
-
|
597 |
-
|
598 |
-
|
599 |
-
|
600 |
-
|
601 |
-
|
602 |
-
|
603 |
-
|
604 |
-
|
605 |
-
|
606 |
-
|
607 |
-
|
608 |
-
|
609 |
-
|
610 |
-
|
611 |
-
|
612 |
-
|
613 |
-
|
614 |
-
|
615 |
-
|
616 |
-
|
617 |
-
|
618 |
-
|
619 |
-
|
620 |
-
|
621 |
-
|
622 |
-
|
623 |
-
|
624 |
-
|
625 |
-
|
626 |
-
|
627 |
-
|
628 |
-
|
629 |
-
|
630 |
-
|
631 |
-
|
632 |
-
|
633 |
-
|
634 |
-
|
635 |
-
|
636 |
-
|
637 |
-
|
638 |
-
|
639 |
-
|
640 |
-
|
641 |
-
|
642 |
-
|
643 |
-
|
644 |
-
|
645 |
-
|
646 |
-
|
647 |
-
|
648 |
-
|
649 |
-
|
650 |
-
|
651 |
-
|
652 |
-
|
653 |
-
|
654 |
-
|
655 |
-
|
656 |
-
|
657 |
-
|
658 |
-
|
659 |
-
|
660 |
-
|
661 |
-
|
662 |
-
|
663 |
-
|
664 |
-
|
665 |
-
|
666 |
-
|
667 |
-
|
668 |
-
|
669 |
-
|
670 |
-
|
671 |
-
|
672 |
-
|
673 |
-
|
674 |
-
|
675 |
-
|
676 |
-
|
677 |
-
|
678 |
-
|
679 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
/**
|
2 |
+
* Google Analytics Page script.
|
3 |
+
*
|
4 |
+
* @package GoogleAnalytics
|
5 |
+
*/
|
6 |
+
|
7 |
+
const GA_ACCESS_CODE_MODAL_ID = "ga_access_code_modal";
|
8 |
+
const GA_DEBUG_MODAL_ID = "ga_debug_modal";
|
9 |
+
const GA_DEBUG_MODAL_CONTENT_ID = "ga_debug_modal_content";
|
10 |
+
const GA_DEBUG_EMAIL = "ga_debug_email";
|
11 |
+
const GA_DEBUG_DESCRIPTION = "ga_debug_description";
|
12 |
+
const GA_ACCESS_CODE_TMP_ID = "ga_access_code_tmp";
|
13 |
+
const GA_ACCESS_CODE_ID = "ga_access_code";
|
14 |
+
const GA_FORM_ID = "ga_form";
|
15 |
+
const GA_MODAL_CLOSE_ID = 'ga_close';
|
16 |
+
const GA_MODAL_BTN_CLOSE_ID = 'ga_btn_close';
|
17 |
+
const GA_GOOGLE_AUTH_BTN_ID = 'ga_authorize_with_google_button';
|
18 |
+
const GA_SAVE_ACCESS_CODE_BTN_ID = 'ga_save_access_code';
|
19 |
const GA_AUTHENTICATION_CODE_ERROR = 'That looks like your Google Analytics Tracking ID. Please enter the authentication token in this space. See here for <a href="https://cl.ly/1y1N1A3h0s1t" target="_blank">a walkthrough</a> of how to do it.';
|
20 |
|
21 |
+
( function( $ ) {
|
22 |
+
ga_popup = {
|
23 |
+
url: '',
|
24 |
+
authorize: function( e, url ) {
|
25 |
+
e.preventDefault();
|
26 |
+
ga_popup.url = url;
|
27 |
+
$( '#' + GA_ACCESS_CODE_MODAL_ID ).appendTo( "body" ).show();
|
28 |
+
ga_popup.open();
|
29 |
+
},
|
30 |
+
open: function() {
|
31 |
+
const p_width = Math.round( screen.width / 2 );
|
32 |
+
const p_height = Math.round( screen.height / 2 );
|
33 |
+
const p_left = Math.round( p_width / 2 );
|
34 |
+
const p_top = 300;
|
35 |
+
window.open(
|
36 |
+
ga_popup.url,
|
37 |
+
'ga_auth_popup',
|
38 |
+
'width=' + p_width + ',height='
|
39 |
+
+ p_height + ',top=' + p_top + ',left=' + p_left,
|
40 |
+
);
|
41 |
+
},
|
42 |
+
saveAccessCode: function( e ) {
|
43 |
+
e.preventDefault();
|
44 |
+
e.target.disabled = 'disabled';
|
45 |
+
ga_loader.show();
|
46 |
+
const ac_tmp = $( '#' + GA_ACCESS_CODE_TMP_ID ).val();
|
47 |
+
if ( ga_popup.validateCode( e, ac_tmp ) ) {
|
48 |
+
$( '#' + GA_ACCESS_CODE_ID ).val( ac_tmp );
|
49 |
+
$( '#' + GA_FORM_ID ).submit();
|
50 |
+
}
|
51 |
+
},
|
52 |
+
validateCode: function( e, code ) {
|
53 |
+
if ( ! code ) {
|
54 |
+
ga_loader.hide();
|
55 |
+
$( '#' + GA_SAVE_ACCESS_CODE_BTN_ID ).removeAttr( 'disabled' );
|
56 |
+
return false;
|
57 |
+
} else if ( code.substring( 0, 2 ) == 'UA' ) {
|
58 |
+
$( '#ga_code_error' ).show().html( GA_AUTHENTICATION_CODE_ERROR );
|
59 |
+
ga_loader.hide();
|
60 |
+
$( '#' + GA_SAVE_ACCESS_CODE_BTN_ID ).removeAttr( 'disabled' );
|
61 |
+
return false;
|
62 |
+
}
|
63 |
+
return true;
|
64 |
+
},
|
65 |
+
};
|
66 |
+
|
67 |
+
ga_modal = {
|
68 |
+
hide: function() {
|
69 |
+
$( '#' + GA_ACCESS_CODE_MODAL_ID ).hide();
|
70 |
+
$( '#' + GA_DEBUG_MODAL_ID ).hide();
|
71 |
+
ga_loader.hide();
|
72 |
+
$( '#' + GA_SAVE_ACCESS_CODE_BTN_ID ).removeAttr( 'disabled' );
|
73 |
+
},
|
74 |
+
};
|
75 |
+
|
76 |
+
ga_events = {
|
77 |
+
|
78 |
+
/**
|
79 |
+
* Send Demographic data.
|
80 |
+
*
|
81 |
+
* @param data
|
82 |
+
*/
|
83 |
+
sendDemoData: function( demoData ) {
|
84 |
+
// Send demographic data.
|
85 |
+
$.ajax(
|
86 |
+
{
|
87 |
+
url: 'https://platform-api.sharethis.com/v1.0/property?id=' + ga_property_id + '&secret=' + ga_secret_id,
|
88 |
+
method: 'PUT',
|
89 |
+
async: false,
|
90 |
+
contentType: 'application/json; charset=utf-8',
|
91 |
+
data: JSON.stringify(
|
92 |
+
{
|
93 |
+
"demographics": demoData,
|
94 |
+
},
|
95 |
+
),
|
96 |
+
},
|
97 |
+
);
|
98 |
+
},
|
99 |
+
/**
|
100 |
+
* Returns gdpr onboarding config values.
|
101 |
+
*/
|
102 |
+
setGDPRConfig: function( isGDPR ) {
|
103 |
+
|
104 |
+
/**
|
105 |
+
* Check if ad blocker exists and notify if so.
|
106 |
+
*/
|
107 |
+
$( document ).ready(
|
108 |
+
function() {
|
109 |
+
if ( $( "#detectadblock" ).height() > 0 ) {
|
110 |
+
} else {
|
111 |
+
$( '#adblocker-notice' ).show();
|
112 |
+
}
|
113 |
+
},
|
114 |
+
);
|
115 |
+
|
116 |
+
if ( ! isGDPR || undefined === gaGdprConfig ) {
|
117 |
+
return;
|
118 |
+
}
|
119 |
+
|
120 |
+
var config = JSON.parse( gaGdprConfig );
|
121 |
+
|
122 |
+
$( '.gdpr-platform input[name="gdpr-enable"]' ).prop( 'checked', config['enabled'] === 'true' );
|
123 |
+
$( '#sharethis-publisher-name' ).val( config['publisher_name'] );
|
124 |
+
$( '#sharethis-user-type option[value="' + config['display'] + '"]' ).attr( 'selected', true );
|
125 |
+
$( '#sharethis-consent-type option[value="' + config['scope'] + '"]' ).attr( 'selected', true );
|
126 |
+
$( '#sharethis-form-color .color[data-value="' + config['color'] + '"]' ).addClass( 'selected' );
|
127 |
+
$( '#st-language option[value="' + config['language'] + '"]' ).attr( 'selected', true );
|
128 |
+
|
129 |
+
if ( undefined !== config['publisher_purposes'] ) {
|
130 |
+
$( "#publisher-purpose .purpose-item input" ).prop( 'checked', false );
|
131 |
+
|
132 |
+
config['publisher_purposes'].map(
|
133 |
+
( purpVal ) =>
|
134 |
+
{
|
135 |
+
var legit = 'true' === purpVal['legitimate_interest'] || true === purpVal['legitimate_interest'];
|
136 |
+
var consent = 'false' === purpVal['legitimate_interest'] || false === purpVal['legitimate_interest'];
|
137 |
+
|
138 |
+
$( '#publisher-purpose .purpose-item input[name="purposes[' + purpVal.id + ']"][value="legitimate"]' ).prop( 'checked', legit );
|
139 |
+
$( '#publisher-purpose .purpose-item input[name="purposes[' + purpVal.id + ']"][value="consent"]' ).prop( 'checked', consent );
|
140 |
+
}
|
141 |
+
);
|
142 |
+
}
|
143 |
+
|
144 |
+
if ( undefined !== config['publisher_restrictions'] ) {
|
145 |
+
$( ".vendor-table-cell-wrapper input" ).prop( 'checked', false );
|
146 |
+
|
147 |
+
$.map(
|
148 |
+
config['publisher_restrictions'],
|
149 |
+
function( id, venVal ) {
|
150 |
+
if ( id ) {
|
151 |
+
$( 'input[type="checkbox"][data-id="' + venVal + '"]' ).prop( 'checked', true );
|
152 |
+
}
|
153 |
+
},
|
154 |
+
);
|
155 |
+
}
|
156 |
+
},
|
157 |
+
scrollToAnchor: function( aid ) {
|
158 |
+
var aTag = $( "a[name='" + aid.toLowerCase() + "']" );
|
159 |
+
|
160 |
+
$( '.vendor-table-body' ).animate(
|
161 |
+
{
|
162 |
+
scrollTop: 0,
|
163 |
+
},
|
164 |
+
0,
|
165 |
+
).animate(
|
166 |
+
{
|
167 |
+
scrollTop: aTag.offset().top - 740,
|
168 |
+
},
|
169 |
+
0,
|
170 |
+
);
|
171 |
+
},
|
172 |
+
|
173 |
+
click: function( selector, callback ) {
|
174 |
+
$( selector ).live( 'click', callback );
|
175 |
+
},
|
176 |
+
codeManuallyCallback: function( features_enabled ) {
|
177 |
+
var checkbox = $( '#ga_enter_code_manually' );
|
178 |
+
if ( features_enabled ) {
|
179 |
+
if ( checkbox.is( ':checked' ) ) {
|
180 |
+
if ( confirm( 'Warning: If you enter your Tracking ID manually, Analytics statistics will not be shown.' ) ) {
|
181 |
+
setTimeout(
|
182 |
+
function() {
|
183 |
+
$( '#ga_authorize_with_google_button' ).attr( 'disabled', 'disabled' ).next().show();
|
184 |
+
$( '#ga_account_selector' ).attr( 'disabled', 'disabled' );
|
185 |
+
$( '#ga_manually_wrapper' ).show();
|
186 |
+
},
|
187 |
+
350,
|
188 |
+
);
|
189 |
+
|
190 |
+
} else {
|
191 |
+
setTimeout(
|
192 |
+
function() {
|
193 |
+
checkbox.removeProp( 'checked' );
|
194 |
+
},
|
195 |
+
350,
|
196 |
+
);
|
197 |
+
}
|
198 |
+
} else {
|
199 |
+
setTimeout(
|
200 |
+
function() {
|
201 |
+
$( '#ga_authorize_with_google_button' ).removeAttr( 'disabled' ).next().hide();
|
202 |
+
$( '#ga_account_selector' ).removeAttr( 'disabled' );
|
203 |
+
$( '#ga_manually_wrapper' ).hide();
|
204 |
+
},
|
205 |
+
350,
|
206 |
+
);
|
207 |
+
}
|
208 |
+
}
|
209 |
+
},
|
210 |
+
initModalEvents: function() {
|
211 |
+
$( 'body' ).on(
|
212 |
+
'click',
|
213 |
+
'#close-review-us',
|
214 |
+
function() {
|
215 |
+
var dataObj = {},
|
216 |
+
self = this;
|
217 |
+
dataObj['action'] = "ga_ajax_hide_review";
|
218 |
+
dataObj[GA_NONCE_FIELD] = GA_NONCE;
|
219 |
+
|
220 |
+
$.ajax(
|
221 |
+
{
|
222 |
+
type: "post",
|
223 |
+
dataType: "json",
|
224 |
+
url: ajaxurl,
|
225 |
+
data: dataObj,
|
226 |
+
success: function( response ) {
|
227 |
+
$( '.ga-review-us' ).fadeOut();
|
228 |
+
},
|
229 |
+
},
|
230 |
+
);
|
231 |
+
},
|
232 |
+
);
|
233 |
+
|
234 |
+
$( '#' + GA_GOOGLE_AUTH_BTN_ID ).on(
|
235 |
+
'click',
|
236 |
+
function() {
|
237 |
+
$( '#' + GA_ACCESS_CODE_TMP_ID ).focus();
|
238 |
+
},
|
239 |
+
);
|
240 |
+
|
241 |
+
$( '#' + GA_MODAL_CLOSE_ID + ', #' + GA_MODAL_BTN_CLOSE_ID + ', #' + GA_DEBUG_MODAL_ID ).on(
|
242 |
+
'click',
|
243 |
+
function() {
|
244 |
+
ga_modal.hide();
|
245 |
+
},
|
246 |
+
);
|
247 |
+
|
248 |
+
$( '#copy-debug' ).on(
|
249 |
+
'click',
|
250 |
+
function() {
|
251 |
+
var copiedText = $( '#ga_debug_info' );
|
252 |
+
|
253 |
+
copiedText.select();
|
254 |
+
document.execCommand( 'copy' );
|
255 |
+
},
|
256 |
+
);
|
257 |
+
|
258 |
+
$( '#' + GA_DEBUG_MODAL_CONTENT_ID ).click(
|
259 |
+
function( event ) {
|
260 |
+
event.stopPropagation();
|
261 |
+
},
|
262 |
+
);
|
263 |
+
},
|
264 |
+
|
265 |
+
getConfig: function() {
|
266 |
+
var config,
|
267 |
+
enabled = $( 'input[name="gdpr-enable"]' ).is( ':checked' ),
|
268 |
+
publisherPurposes = [],
|
269 |
+
display = $( '#sharethis-user-type option:selected' ).val(),
|
270 |
+
name = $( '#sharethis-publisher-name' ).val(),
|
271 |
+
scope = 'publisher',
|
272 |
+
color = $( '#sharethis-form-color .color.selected' ).attr( 'data-value' ),
|
273 |
+
publisherRestrictions = {},
|
274 |
+
language = $( '#st-language' ).val();
|
275 |
+
|
276 |
+
$( '#publisher-purpose input:checked' ).each(
|
277 |
+
function( index, value ) {
|
278 |
+
var theId = $( value ).attr( 'data-id' ),
|
279 |
+
legit = 'consent' !== $( value ).val();
|
280 |
+
|
281 |
+
publisherPurposes.push( { 'id': theId, 'legitimate_interest': legit } );
|
282 |
+
},
|
283 |
+
);
|
284 |
+
|
285 |
+
$( '.vendor-table-cell-wrapper label input:checked' ).each(
|
286 |
+
function( index, value ) {
|
287 |
+
var vendorId = $( value ).attr( 'data-id' );
|
288 |
+
if ( vendorId ) {
|
289 |
+
publisherRestrictions[vendorId] = true;
|
290 |
+
}
|
291 |
+
},
|
292 |
+
);
|
293 |
+
|
294 |
+
config = {
|
295 |
+
enabled: enabled,
|
296 |
+
display: display,
|
297 |
+
publisher_name: name,
|
298 |
+
publisher_purposes: publisherPurposes,
|
299 |
+
publisher_restrictions: publisherRestrictions,
|
300 |
+
language: language,
|
301 |
+
color: color,
|
302 |
+
scope: scope,
|
303 |
+
};
|
304 |
+
|
305 |
+
return config;
|
306 |
+
},
|
307 |
+
|
308 |
+
enableGdpr: function() {
|
309 |
+
var timer = '';
|
310 |
+
this.$gdprContainer = $( '.gdpr-platform' );
|
311 |
+
|
312 |
+
// New color select.
|
313 |
+
this.$gdprContainer.on(
|
314 |
+
'click',
|
315 |
+
"#sharethis-form-color .color",
|
316 |
+
function() {
|
317 |
+
$( '#sharethis-form-color .color' ).removeClass( 'selected' );
|
318 |
+
$( this ).addClass( 'selected' );
|
319 |
+
}
|
320 |
+
);
|
321 |
+
|
322 |
+
// clear or show choices.
|
323 |
+
this.$gdprContainer.on(
|
324 |
+
'click',
|
325 |
+
'#clear-choices',
|
326 |
+
function( e ) {
|
327 |
+
e.preventDefault();
|
328 |
+
e.stopPropagation();
|
329 |
+
|
330 |
+
$( '.purpose-item input' ).prop( 'checked', false );
|
331 |
+
},
|
332 |
+
);
|
333 |
+
|
334 |
+
// clear or show choices.
|
335 |
+
this.$gdprContainer.on(
|
336 |
+
'click',
|
337 |
+
'#see-st-choices',
|
338 |
+
function( e ) {
|
339 |
+
e.preventDefault();
|
340 |
+
e.stopPropagation();
|
341 |
+
$( '.purpose-item input[name="purposes[1]"]' ).prop( 'checked', true );
|
342 |
+
$( '.purpose-item input[name="purposes[3]"][value="consent"]' ).prop( 'checked', true );
|
343 |
+
$( '.purpose-item input[name="purposes[5]"][value="consent"]' ).prop( 'checked', true );
|
344 |
+
$( '.purpose-item input[name="purposes[6]"][value="consent"]' ).prop( 'checked', true );
|
345 |
+
$( '.purpose-item input[name="purposes[9]"][value="legitimate"]' ).prop( 'checked', true );
|
346 |
+
$( '.purpose-item input[name="purposes[10]"][value="legitimate"]' ).prop( 'checked', true );
|
347 |
+
},
|
348 |
+
);
|
349 |
+
|
350 |
+
// Uncheck radio if click on selected box.
|
351 |
+
this.$gdprContainer.on(
|
352 |
+
'click',
|
353 |
+
'.lever',
|
354 |
+
( e ) =>
|
355 |
+
{
|
356 |
+
e.preventDefault();
|
357 |
+
e.stopPropagation();
|
358 |
+
|
359 |
+
const theInput = $( e.currentTarget ).siblings( 'input' );
|
360 |
+
|
361 |
+
if ( theInput.is( ':checked' ) ) {
|
362 |
+
$( 'input[name="' + theInput.attr( 'name' ) + '"]' ).prop( 'checked', false );
|
363 |
+
} else {
|
364 |
+
theInput.prop( 'checked', true );
|
365 |
+
}
|
366 |
+
},
|
367 |
+
);
|
368 |
+
|
369 |
+
// Toggle button menus when arrows are clicked.
|
370 |
+
$( 'body' ).on(
|
371 |
+
'click',
|
372 |
+
'.accor-wrap .accor-tab',
|
373 |
+
function() {
|
374 |
+
var type = $( this ).find( 'span.accor-arrow' );
|
375 |
+
|
376 |
+
var closestButton = $( type ).parent( '.accor-tab' ).parent( '.accor-wrap' );
|
377 |
+
|
378 |
+
if ( '►' === type.html() ) {
|
379 |
+
|
380 |
+
// Show the button configs.
|
381 |
+
closestButton.find( '.accor-content' ).slideDown();
|
382 |
+
|
383 |
+
// Change the icon next to title.
|
384 |
+
closestButton.find( '.accor-arrow' ).html( '▼' );
|
385 |
+
} else {
|
386 |
+
|
387 |
+
// Show the button configs.
|
388 |
+
closestButton.find( '.accor-content' ).slideUp();
|
389 |
+
|
390 |
+
// Change the icon next to title.
|
391 |
+
closestButton.find( '.accor-arrow' ).html( '►' );
|
392 |
+
}
|
393 |
+
},
|
394 |
+
);
|
395 |
+
|
396 |
+
$( 'body' ).on(
|
397 |
+
'click',
|
398 |
+
'.demo-enable-popup .close-demo-modal',
|
399 |
+
function( e ) {
|
400 |
+
e.preventDefault();
|
401 |
+
e.stopPropagation();
|
402 |
+
$( '.demo-enable-popup' ).removeClass( 'engage' );
|
403 |
+
},
|
404 |
+
);
|
405 |
+
|
406 |
+
$( 'body' ).on(
|
407 |
+
'click',
|
408 |
+
'#demographic-popup',
|
409 |
+
function( e ) {
|
410 |
+
e.preventDefault();
|
411 |
+
e.stopPropagation();
|
412 |
+
$( '.demo-enable-popup' ).addClass( 'engage' );
|
413 |
+
},
|
414 |
+
);
|
415 |
+
|
416 |
+
$( 'body' ).on(
|
417 |
+
'click',
|
418 |
+
'#enable-demographic, #Enable-demographic',
|
419 |
+
function( e ) {
|
420 |
+
e.preventDefault();
|
421 |
+
e.stopPropagation();
|
422 |
+
ga_events.enableDemographic( 'enable' );
|
423 |
+
},
|
424 |
+
);
|
425 |
+
|
426 |
+
$( 'body' ).on(
|
427 |
+
'click',
|
428 |
+
'#Disable-demographic',
|
429 |
+
function( e ) {
|
430 |
+
e.preventDefault();
|
431 |
+
e.stopPropagation();
|
432 |
+
ga_events.enableDemographic( 'disable' );
|
433 |
+
},
|
434 |
+
);
|
435 |
+
|
436 |
+
// Handle account sign-out via Ajax.
|
437 |
+
$( 'body' ).on(
|
438 |
+
'click',
|
439 |
+
'#ga_sign_out',
|
440 |
+
function ( e ) {
|
441 |
+
e.preventDefault();
|
442 |
+
e.stopPropagation();
|
443 |
+
|
444 |
+
$.ajax(
|
445 |
+
{
|
446 |
+
type: 'post',
|
447 |
+
dataType: 'json',
|
448 |
+
url: googleAnalyticsPage.ajaxurl,
|
449 |
+
data: {
|
450 |
+
action: 'ga_ajax_sign_out',
|
451 |
+
nonce: googleAnalyticsPage.nonce,
|
452 |
+
},
|
453 |
+
success: function ( response ) {
|
454 |
+
window.location.href = encodeURI( googleAnalyticsPage.settingsURL )
|
455 |
+
},
|
456 |
+
},
|
457 |
+
);
|
458 |
+
},
|
459 |
+
);
|
460 |
+
|
461 |
+
// Enable GDPR tool.
|
462 |
+
$( 'body' ).on(
|
463 |
+
'click',
|
464 |
+
'.gdpr-submit',
|
465 |
+
function( e ) {
|
466 |
+
e.preventDefault();
|
467 |
+
e.stopPropagation();
|
468 |
+
|
469 |
+
var dataObj = {},
|
470 |
+
self = this,
|
471 |
+
config = ga_events.getConfig();
|
472 |
+
|
473 |
+
theData = JSON.stringify(
|
474 |
+
{
|
475 |
+
'secret': ga_secret_id,
|
476 |
+
'id': ga_property_id,
|
477 |
+
'product': 'gdpr-compliance-tool-v2',
|
478 |
+
'config': config,
|
479 |
+
},
|
480 |
+
);
|
481 |
+
|
482 |
+
// Send new button status value.
|
483 |
+
$.ajax(
|
484 |
+
{
|
485 |
+
url: 'https://platform-api.sharethis.com/v1.0/property/product',
|
486 |
+
method: 'POST',
|
487 |
+
async: false,
|
488 |
+
contentType: 'application/json; charset=utf-8',
|
489 |
+
data: theData,
|
490 |
+
success:
|
491 |
+
function( results ) {
|
492 |
+
},
|
493 |
+
},
|
494 |
+
);
|
495 |
+
|
496 |
+
dataObj['action'] = "ga_ajax_enable_gdpr";
|
497 |
+
dataObj['nonce'] = 'true';
|
498 |
+
dataObj['config'] = config;
|
499 |
+
|
500 |
+
$.ajax(
|
501 |
+
{
|
502 |
+
type: "post",
|
503 |
+
dataType: "json",
|
504 |
+
url: ajaxurl,
|
505 |
+
data: dataObj,
|
506 |
+
success: function( response ) {
|
507 |
+
window.location.reload();
|
508 |
+
},
|
509 |
+
},
|
510 |
+
);
|
511 |
+
},
|
512 |
+
);
|
513 |
+
|
514 |
+
// Enable GDPR tool.
|
515 |
+
$( 'body' ).on(
|
516 |
+
'click',
|
517 |
+
'.gdpr-enable',
|
518 |
+
function( e ) {
|
519 |
+
e.preventDefault();
|
520 |
+
e.stopPropagation();
|
521 |
+
|
522 |
+
var dataObj = {},
|
523 |
+
self = this,
|
524 |
+
config = ga_events.getConfig();
|
525 |
+
|
526 |
+
if ( $( 'body' ).hasClass( 'google-analytics_page_googleanalytics-settings' ) ) {
|
527 |
+
config = {
|
528 |
+
enabled: true,
|
529 |
+
display: 'eu',
|
530 |
+
publisher_name: '',
|
531 |
+
publisher_purposes: [],
|
532 |
+
language: 'en',
|
533 |
+
color: '',
|
534 |
+
scope: 'global',
|
535 |
+
};
|
536 |
+
}
|
537 |
+
|
538 |
+
theData = JSON.stringify(
|
539 |
+
{
|
540 |
+
'secret': ga_secret_id,
|
541 |
+
'id': ga_property_id,
|
542 |
+
'product': 'gdpr-compliance-tool-v2',
|
543 |
+
'config': config,
|
544 |
+
},
|
545 |
+
);
|
546 |
+
|
547 |
+
// Send new button status value.
|
548 |
+
$.ajax(
|
549 |
+
{
|
550 |
+
url: 'https://platform-api.sharethis.com/v1.0/property/product',
|
551 |
+
method: 'POST',
|
552 |
+
async: false,
|
553 |
+
contentType: 'application/json; charset=utf-8',
|
554 |
+
data: theData,
|
555 |
+
success: function( results ) {
|
556 |
+
},
|
557 |
+
},
|
558 |
+
);
|
559 |
+
|
560 |
+
dataObj['action'] = "ga_ajax_enable_gdpr";
|
561 |
+
dataObj['nonce'] = 'true';
|
562 |
+
dataObj['config'] = config;
|
563 |
+
|
564 |
+
$.ajax(
|
565 |
+
{
|
566 |
+
type: "post",
|
567 |
+
dataType: "json",
|
568 |
+
url: ajaxurl,
|
569 |
+
data: dataObj,
|
570 |
+
success: function( response ) {
|
571 |
+
window.location.href = siteAdminUrl + 'admin.php?page=googleanalytics%2Fgdpr';
|
572 |
+
},
|
573 |
+
},
|
574 |
+
);
|
575 |
+
},
|
576 |
+
);
|
577 |
+
|
578 |
+
// Scroll to anchor in vendor list.
|
579 |
+
// Send user input to category search AFTER they stop typing.
|
580 |
+
$( 'body' ).on(
|
581 |
+
'keyup',
|
582 |
+
'.vendor-search input',
|
583 |
+
function( e ) {
|
584 |
+
clearTimeout( timer );
|
585 |
+
|
586 |
+
timer = setTimeout(
|
587 |
+
function() {
|
588 |
+
ga_events.scrollToAnchor( $( this ).val() );
|
589 |
+
}
|
590 |
+
.bind( this, ga_events ),
|
591 |
+
500,
|
592 |
+
);
|
593 |
+
},
|
594 |
+
);
|
595 |
+
},
|
596 |
+
|
597 |
+
enableDemographic: function( disable ) {
|
598 |
+
var dataObj = {};
|
599 |
+
|
600 |
+
dataObj['action'] = "ga_ajax_enable_demographic";
|
601 |
+
dataObj['nonce'] = ga_demo_nonce;
|
602 |
+
dataObj['enabled'] = 'disable' === disable ? 'false' : 'true';
|
603 |
+
|
604 |
+
$.ajax(
|
605 |
+
{
|
606 |
+
type: "post",
|
607 |
+
dataType: "json",
|
608 |
+
url: ajaxurl,
|
609 |
+
data: dataObj,
|
610 |
+
success: function( response ) {
|
611 |
+
window.location.href = siteAdminUrl + 'admin.php?page=googleanalytics&ga_action=demo-ad';
|
612 |
+
},
|
613 |
+
},
|
614 |
+
);
|
615 |
+
},
|
616 |
+
};
|
617 |
+
|
618 |
+
/**
|
619 |
+
* Handles "disable all features" switch button
|
620 |
+
*
|
621 |
+
* @type {{init: ga_switcher.init}}
|
622 |
+
*/
|
623 |
+
ga_switcher = {
|
624 |
+
init: function( state ) {
|
625 |
+
var checkbox = $( "#ga-disable" );
|
626 |
+
|
627 |
+
if ( state ) {
|
628 |
+
checkbox.prop( 'checked', 'checked' );
|
629 |
+
} else {
|
630 |
+
checkbox.removeProp( 'checked' );
|
631 |
+
}
|
632 |
+
|
633 |
+
$( ".ga-slider-disable" ).on(
|
634 |
+
"click",
|
635 |
+
function( e ) {
|
636 |
+
var manually_enter_not_checked = $( '#ga_enter_code_manually' ).not( ':checked' );
|
637 |
+
if ( checkbox.not( ':checked' ).length > 0 ) {
|
638 |
+
if ( confirm( 'This will disable Dashboards and Google API' ) ) {
|
639 |
+
setTimeout(
|
640 |
+
function() {
|
641 |
+
window.location.href = GA_DISABLE_FEATURE_URL;
|
642 |
+
},
|
643 |
+
350,
|
644 |
+
);
|
645 |
+
} else {
|
646 |
+
setTimeout(
|
647 |
+
function() {
|
648 |
+
checkbox.removeProp( 'checked' );
|
649 |
+
},
|
650 |
+
350,
|
651 |
+
);
|
652 |
+
}
|
653 |
+
} else {
|
654 |
+
setTimeout(
|
655 |
+
function() {
|
656 |
+
window.location.href = GA_ENABLE_FEATURE_URL;
|
657 |
+
},
|
658 |
+
350,
|
659 |
+
);
|
660 |
+
}
|
661 |
+
},
|
662 |
+
);
|
663 |
+
},
|
664 |
+
};
|
665 |
+
|
666 |
+
$( document ).ready(
|
667 |
+
function() {
|
668 |
+
const scrollData = $( '#ga-stats-container' ).attr( 'data-scroll' );
|
669 |
+
const scrollEl = '' !== scrollData ? $( '.' + scrollData ) : '';
|
670 |
+
const theBody = $( 'body' );
|
671 |
+
|
672 |
+
ga_events.initModalEvents();
|
673 |
+
ga_events.enableGdpr();
|
674 |
+
ga_events.setGDPRConfig( theBody.hasClass( 'google-analytics_page_googleanalytics-gdpr' ) );
|
675 |
+
|
676 |
+
if ( '' !== scrollData && theBody.hasClass( 'toplevel_page_googleanalytics' ) ) {
|
677 |
+
$( [ document.documentElement, document.body ] ).animate(
|
678 |
+
{
|
679 |
+
scrollTop: scrollEl.offset().top + 450,
|
680 |
+
},
|
681 |
+
500,
|
682 |
+
);
|
683 |
+
}
|
684 |
+
},
|
685 |
+
);
|
686 |
+
|
687 |
+
const offset = 50;
|
688 |
+
const minWidth = 350;
|
689 |
+
const wrapperSelector = '#ga-stats-container';
|
690 |
+
const chartContainer = 'chart_div';
|
691 |
+
const demoChartDeviceContainer = 'demo_chart_device_div';
|
692 |
+
const demoChartGenderContainer = 'demo_chart_gender_div';
|
693 |
+
const demoChartAgeContainer = 'demo_chart_age_div';
|
694 |
+
|
695 |
+
ga_charts = {
|
696 |
+
init: function( callback ) {
|
697 |
+
$( document ).ready(
|
698 |
+
function() {
|
699 |
+
google.charts.load(
|
700 |
+
'current',
|
701 |
+
{
|
702 |
+
'packages': [ 'corechart' ],
|
703 |
+
},
|
704 |
+
);
|
705 |
+
ga_loader.show();
|
706 |
+
google.charts.setOnLoadCallback( callback );
|
707 |
+
},
|
708 |
+
);
|
709 |
+
},
|
710 |
+
createTooltip: function( day, pageviews ) {
|
711 |
+
return '<div style="padding:10px;width:100px;"><strong>' + day
|
712 |
+
+ '</strong><br>Pageviews:<strong> ' + pageviews
|
713 |
+
+ '</strong></div>';
|
714 |
+
},
|
715 |
+
events: function( data ) {
|
716 |
+
$( window ).on(
|
717 |
+
'resize',
|
718 |
+
function() {
|
719 |
+
ga_charts.drawChart( data, ga_tools.recomputeChartWidth( minWidth, offset, wrapperSelector ) );
|
720 |
+
},
|
721 |
+
);
|
722 |
+
},
|
723 |
+
drawChart: function( data, chartWidth ) {
|
724 |
+
|
725 |
+
if ( typeof chartWidth == 'undefined' ) {
|
726 |
+
chartWidth = ga_tools.recomputeChartWidth( minWidth, offset, wrapperSelector );
|
727 |
+
}
|
728 |
+
|
729 |
+
const options = {
|
730 |
+
lineWidth: 5,
|
731 |
+
pointSize: 10,
|
732 |
+
tooltip: {
|
733 |
+
isHtml: true,
|
734 |
+
},
|
735 |
+
legend: {
|
736 |
+
position: ( ga_tools.getCurrentWidth( wrapperSelector ) <= minWidth ? 'top' : 'top' ),
|
737 |
+
maxLines: 5,
|
738 |
+
alignment: 'start',
|
739 |
+
textStyle: {
|
740 |
+
color: '#000',
|
741 |
+
fontSize: 12,
|
742 |
+
},
|
743 |
+
},
|
744 |
+
colors: [ '#4285f4' ],
|
745 |
+
hAxis: {
|
746 |
+
title: 'Day',
|
747 |
+
titleTextStyle: {
|
748 |
+
color: '#333',
|
749 |
+
},
|
750 |
+
},
|
751 |
+
vAxis: {
|
752 |
+
minValue: 0,
|
753 |
+
},
|
754 |
+
width: chartWidth,
|
755 |
+
height: 500,
|
756 |
+
chartArea: {
|
757 |
+
top: 50,
|
758 |
+
left: 50,
|
759 |
+
right: 30,
|
760 |
+
bottom: 100,
|
761 |
+
},
|
762 |
+
};
|
763 |
+
|
764 |
+
var chart = new google.visualization.AreaChart(
|
765 |
+
document.getElementById( chartContainer )
|
766 |
+
);
|
767 |
+
chart.draw( data, options );
|
768 |
+
},
|
769 |
+
drawDemoGenderChart: function( data, chartWidth ) {
|
770 |
+
if ( typeof chartWidth == 'undefined' ) {
|
771 |
+
chartWidth = ga_tools.recomputeChartWidth( minWidth, offset, wrapperSelector );
|
772 |
+
}
|
773 |
+
|
774 |
+
data = google.visualization.arrayToDataTable( data );
|
775 |
+
|
776 |
+
var chart = new google.visualization.PieChart( document.getElementById( demoChartGenderContainer ) );
|
777 |
+
var options = {
|
778 |
+
title: 'Gender',
|
779 |
+
};
|
780 |
+
|
781 |
+
chart.draw( data, options );
|
782 |
+
},
|
783 |
+
drawDemoDeviceChart: function( data, chartWidth ) {
|
784 |
+
if ( typeof chartWidth == 'undefined' ) {
|
785 |
+
chartWidth = ga_tools.recomputeChartWidth( minWidth, offset, wrapperSelector );
|
786 |
+
}
|
787 |
+
|
788 |
+
data = google.visualization.arrayToDataTable( data );
|
789 |
+
|
790 |
+
var chart = new google.visualization.PieChart( document.getElementById( demoChartDeviceContainer ) );
|
791 |
+
var options = {
|
792 |
+
title: 'Device Breakdown',
|
793 |
+
};
|
794 |
+
|
795 |
+
chart.draw( data, options );
|
796 |
+
},
|
797 |
+
|
798 |
+
drawDemoAgeChart: function( data, chartWidth ) {
|
799 |
+
if ( typeof chartWidth == 'undefined' ) {
|
800 |
+
chartWidth = ga_tools.recomputeChartWidth( minWidth, offset, wrapperSelector );
|
801 |
+
}
|
802 |
+
|
803 |
+
data = google.visualization.arrayToDataTable( data );
|
804 |
+
|
805 |
+
var options = {
|
806 |
+
title: 'Age',
|
807 |
+
chartArea: { width: '50%' },
|
808 |
+
hAxis: {
|
809 |
+
minValue: 0,
|
810 |
+
},
|
811 |
+
};
|
812 |
+
|
813 |
+
var chart = new google.visualization.BarChart( document.getElementById( demoChartAgeContainer ) );
|
814 |
+
|
815 |
+
chart.draw( data, options );
|
816 |
+
},
|
817 |
+
};
|
818 |
+
ga_debug = {
|
819 |
+
url: '',
|
820 |
+
open_modal: function( e ) {
|
821 |
+
e.preventDefault();
|
822 |
+
$( '#' + GA_DEBUG_MODAL_ID ).appendTo( "body" ).show();
|
823 |
+
$( '#ga-send-debug-email' ).removeAttr( 'disabled' );
|
824 |
+
$( '#ga_debug_error' ).hide();
|
825 |
+
$( '#ga_debug_success' ).hide();
|
826 |
+
},
|
827 |
+
send_email: function( e ) {
|
828 |
+
e.preventDefault();
|
829 |
+
ga_loader.show();
|
830 |
+
var dataObj = {};
|
831 |
+
dataObj['action'] = "googleanalytics_send_debug_email";
|
832 |
+
dataObj['email'] = $( '#' + GA_DEBUG_EMAIL ).val();
|
833 |
+
dataObj['description'] = $( '#' + GA_DEBUG_DESCRIPTION ).val();
|
834 |
+
$.ajax(
|
835 |
+
{
|
836 |
+
type: "post",
|
837 |
+
dataType: "json",
|
838 |
+
url: ajaxurl,
|
839 |
+
data: dataObj,
|
840 |
+
success: function( response ) {
|
841 |
+
ga_loader.hide();
|
842 |
+
if ( typeof response.error !== "undefined" ) {
|
843 |
+
$( '#ga_debug_error' ).show().html( response.error );
|
844 |
+
} else if ( typeof response.success !== "undefined" ) {
|
845 |
+
$( '#ga_debug_error' ).hide();
|
846 |
+
$( '#ga-send-debug-email' ).attr( 'disabled', 'disabled' );
|
847 |
+
$( '#ga_debug_success' ).show().html( response.success );
|
848 |
+
}
|
849 |
+
},
|
850 |
+
},
|
851 |
+
);
|
852 |
+
},
|
853 |
+
};
|
854 |
+
} )( jQuery );
|
lib/Ga_Lib_Api_Request.php
DELETED
@@ -1,215 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
class Ga_Lib_Api_Request {
|
4 |
-
|
5 |
-
static $instance = null;
|
6 |
-
|
7 |
-
const HEADER_CONTENT_TYPE = "application/x-www-form-urlencoded";
|
8 |
-
const HEADER_CONTENT_TYPE_JSON = "Content-type: application/json";
|
9 |
-
const HEADER_ACCEPT = "Accept: application/json, text/javascript, */*; q=0.01";
|
10 |
-
const TIMEOUT = 5;
|
11 |
-
const USER_AGENT = 'googleanalytics-wordpress-plugin';
|
12 |
-
|
13 |
-
private $headers = array();
|
14 |
-
|
15 |
-
// Whether to cache or not
|
16 |
-
private $cache = false;
|
17 |
-
|
18 |
-
private $appendix = '';
|
19 |
-
|
20 |
-
private function __construct( $cache = false, $appendix = '' ) {
|
21 |
-
$this->cache = $cache;
|
22 |
-
$this->appendix = $appendix;
|
23 |
-
}
|
24 |
-
|
25 |
-
/**
|
26 |
-
* Returns API client instance.
|
27 |
-
*
|
28 |
-
* @return Ga_Lib_Api_Request|null
|
29 |
-
*/
|
30 |
-
public static function get_instance( $cache = false, $appendix = '' ) {
|
31 |
-
if ( self::$instance === null ) {
|
32 |
-
self::$instance = new Ga_Lib_Api_Request( $cache, $appendix );
|
33 |
-
}
|
34 |
-
|
35 |
-
return self::$instance;
|
36 |
-
}
|
37 |
-
|
38 |
-
/**
|
39 |
-
* Sets request headers.
|
40 |
-
*
|
41 |
-
* @param $headers
|
42 |
-
*/
|
43 |
-
public function set_request_headers( $headers ) {
|
44 |
-
if ( is_array( $headers ) ) {
|
45 |
-
$this->headers = array_merge( $this->headers, $headers );
|
46 |
-
} else {
|
47 |
-
$this->headers[] = $headers;
|
48 |
-
}
|
49 |
-
}
|
50 |
-
|
51 |
-
/**
|
52 |
-
* Perform HTTP request.
|
53 |
-
*
|
54 |
-
* @param string $url URL address
|
55 |
-
* @param string $rawPostBody
|
56 |
-
* @param boolean $json Whether to append JSON content type
|
57 |
-
* @param boolean $force_no_cache Whether to force not to cache response data even if cache property is set to true
|
58 |
-
*
|
59 |
-
* @return string Response
|
60 |
-
* @throws Exception
|
61 |
-
*/
|
62 |
-
public function make_request( $url, $rawPostBody = null, $json = false, $force_no_cache = false ) {
|
63 |
-
|
64 |
-
// Return cached data if exist
|
65 |
-
if ( ! $force_no_cache ) {
|
66 |
-
if ( $this->cache ) {
|
67 |
-
$wp_transient_name = Ga_Cache::get_transient_name( $url, $rawPostBody, $this->appendix );
|
68 |
-
|
69 |
-
if ( $cached = Ga_Cache::get_cached_result( $wp_transient_name ) ) {
|
70 |
-
if ( ! Ga_Cache::is_data_cache_outdated( $wp_transient_name, $this->appendix ) ) {
|
71 |
-
return $cached;
|
72 |
-
}
|
73 |
-
}
|
74 |
-
|
75 |
-
// Check if the next request after error is allowed
|
76 |
-
if ( false === Ga_Cache::is_next_request_allowed( $wp_transient_name ) ) {
|
77 |
-
throw new Ga_Lib_Api_Client_Exception( _( 'There are temporary connection issues, please try again later.' ) );
|
78 |
-
}
|
79 |
-
}
|
80 |
-
}
|
81 |
-
|
82 |
-
|
83 |
-
if ( !function_exists( 'curl_init' ) ) {
|
84 |
-
throw new Ga_Lib_Api_Client_Exception( _( 'cURL functions are not available' ) );
|
85 |
-
}
|
86 |
-
|
87 |
-
// Set default headers
|
88 |
-
$this->set_request_headers( array(
|
89 |
-
( $json ? self::HEADER_CONTENT_TYPE_JSON : self::HEADER_CONTENT_TYPE ),
|
90 |
-
self::HEADER_ACCEPT
|
91 |
-
) );
|
92 |
-
|
93 |
-
$ch = curl_init( $url );
|
94 |
-
$headers = $this->headers;
|
95 |
-
|
96 |
-
$curl_timeout = self::TIMEOUT;
|
97 |
-
$php_execution_time = ini_get( 'max_execution_time' );
|
98 |
-
if ( !empty( $php_execution_time ) && is_numeric( $php_execution_time ) ) {
|
99 |
-
if ( $php_execution_time < 36 && $php_execution_time > 9 ) {
|
100 |
-
$curl_timeout = $php_execution_time - 5;
|
101 |
-
} elseif ( $php_execution_time < 10 ) {
|
102 |
-
$curl_timeout = 5;
|
103 |
-
}
|
104 |
-
}
|
105 |
-
|
106 |
-
// Set the proxy configuration. The user can provide this in wp-config.php
|
107 |
-
if ( defined( 'WP_PROXY_HOST' ) ) {
|
108 |
-
curl_setopt( $ch, CURLOPT_PROXY, WP_PROXY_HOST );
|
109 |
-
}
|
110 |
-
if ( defined( 'WP_PROXY_PORT' ) ) {
|
111 |
-
curl_setopt( $ch, CURLOPT_PROXYPORT, WP_PROXY_PORT );
|
112 |
-
}
|
113 |
-
if ( defined( 'WP_PROXY_USERNAME' ) ) {
|
114 |
-
$auth = WP_PROXY_USERNAME;
|
115 |
-
if ( defined( 'WP_PROXY_PASSWORD' ) ) {
|
116 |
-
$auth .= ':' . WP_PROXY_PASSWORD;
|
117 |
-
}
|
118 |
-
curl_setopt( $ch, CURLOPT_PROXYUSERPWD, $auth );
|
119 |
-
}
|
120 |
-
|
121 |
-
curl_setopt( $ch, CURLOPT_CONNECTTIMEOUT, $curl_timeout );
|
122 |
-
curl_setopt( $ch, CURLOPT_TIMEOUT, $curl_timeout );
|
123 |
-
curl_setopt( $ch, CURLOPT_HEADER, true );
|
124 |
-
curl_setopt( $ch, CURLOPT_SSL_VERIFYPEER, true );
|
125 |
-
curl_setopt( $ch, CURLOPT_SSL_VERIFYHOST, 2 );
|
126 |
-
|
127 |
-
if ( !function_exists( 'ini_get' ) || ! ini_get( 'curl.cainfo' ) ) {
|
128 |
-
curl_setopt( $ch, CURLOPT_CAINFO, $this->get_cert_path() );
|
129 |
-
}
|
130 |
-
|
131 |
-
curl_setopt( $ch, CURLINFO_HEADER_OUT, true );
|
132 |
-
curl_setopt( $ch, CURLOPT_HTTPHEADER, $headers );
|
133 |
-
curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true );
|
134 |
-
curl_setopt( $ch, CURLOPT_USERAGENT, self::USER_AGENT );
|
135 |
-
if ( defined( 'CURLOPT_IPRESOLVE' ) && defined( 'CURL_IPRESOLVE_V4' ) ) {
|
136 |
-
curl_setopt( $ch, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4 );
|
137 |
-
}
|
138 |
-
|
139 |
-
// POST body
|
140 |
-
if ( !empty( $rawPostBody ) ) {
|
141 |
-
curl_setopt( $ch, CURLOPT_POST, true );
|
142 |
-
curl_setopt( $ch, CURLOPT_POSTFIELDS, ( $json ? $rawPostBody : http_build_query( $rawPostBody , null, '&' ) ) );
|
143 |
-
}
|
144 |
-
|
145 |
-
// Execute request
|
146 |
-
$response = curl_exec( $ch );
|
147 |
-
|
148 |
-
if ( $error = curl_error( $ch ) ) {
|
149 |
-
$errno = curl_errno( $ch );
|
150 |
-
curl_close( $ch );
|
151 |
-
|
152 |
-
// Store last cache time when unsuccessful
|
153 |
-
if ( false === $force_no_cache ) {
|
154 |
-
if ( true === $this->cache ) {
|
155 |
-
Ga_Cache::set_last_cache_time( $wp_transient_name );
|
156 |
-
Ga_Cache::set_last_time_attempt();
|
157 |
-
}
|
158 |
-
}
|
159 |
-
|
160 |
-
throw new Ga_Lib_Api_Client_Exception( $error . ' (' . $errno . ')' );
|
161 |
-
} else {
|
162 |
-
$httpCode = curl_getinfo( $ch, CURLINFO_HTTP_CODE );
|
163 |
-
$headerSize = curl_getinfo( $ch, CURLINFO_HEADER_SIZE );
|
164 |
-
$header = substr( $response, 0, $headerSize );
|
165 |
-
$body = substr( $response, $headerSize, strlen( $response ) );
|
166 |
-
if ( preg_match( '/^(4|5)[0-9]{2}/', $httpCode ) ) {
|
167 |
-
|
168 |
-
throw new Ga_Lib_Api_Request_Exception( ( $httpCode == 404 ? _( 'Requested URL doesn\'t exists: ' . $url ) : $body ) );
|
169 |
-
}
|
170 |
-
|
171 |
-
curl_close( $ch );
|
172 |
-
|
173 |
-
$response_data = array( $header, $body );
|
174 |
-
|
175 |
-
if (isset($_REQUEST['key'])) {
|
176 |
-
$profile = array(
|
177 |
-
'key' => sanitize_text_field( $_REQUEST['key'] ),
|
178 |
-
'token' => sanitize_text_field( $_REQUEST['token'] ),
|
179 |
-
'ua' => monsterinsights_is_valid_ua( $_REQUEST['ua'] ),
|
180 |
-
'viewname' => sanitize_text_field( $_REQUEST['miview'] ),
|
181 |
-
'a' => sanitize_text_field( $_REQUEST['a'] ), // AccountID
|
182 |
-
'w' => sanitize_text_field( $_REQUEST['w'] ), // PropertyID
|
183 |
-
'p' => sanitize_text_field( $_REQUEST['p'] ), // View ID
|
184 |
-
'siteurl' => site_url(),
|
185 |
-
'neturl' => network_admin_url(),
|
186 |
-
);
|
187 |
-
}
|
188 |
-
|
189 |
-
|
190 |
-
|
191 |
-
// Cache result
|
192 |
-
if ( false === $force_no_cache ) {
|
193 |
-
if ( true === $this->cache ) {
|
194 |
-
Ga_Cache::set_cache( $wp_transient_name, $response_data );
|
195 |
-
}
|
196 |
-
}
|
197 |
-
|
198 |
-
|
199 |
-
return $response_data;
|
200 |
-
}
|
201 |
-
}
|
202 |
-
|
203 |
-
private function get_cert_path() {
|
204 |
-
return GA_PLUGIN_DIR . '/lib/cert/cacerts.pem';
|
205 |
-
}
|
206 |
-
|
207 |
-
}
|
208 |
-
|
209 |
-
class Ga_Lib_Api_Request_Exception extends Exception {
|
210 |
-
|
211 |
-
public function __construct( $message ) {
|
212 |
-
parent::__construct( $message );
|
213 |
-
}
|
214 |
-
|
215 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
lib/Ga_Lib_Api_Response.php
DELETED
@@ -1,42 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
class Ga_Lib_Api_Response {
|
4 |
-
|
5 |
-
public static $empty_response = array( '', '' );
|
6 |
-
private $header;
|
7 |
-
private $body;
|
8 |
-
private $data;
|
9 |
-
|
10 |
-
function __construct( $raw_response = null ) {
|
11 |
-
if (!empty($raw_response)) {
|
12 |
-
$this->setHeader( $raw_response[ 0 ] );
|
13 |
-
$this->setBody( $raw_response[ 1 ] );
|
14 |
-
$this->setData( json_decode( $raw_response[ 1 ], true ) );
|
15 |
-
}
|
16 |
-
}
|
17 |
-
|
18 |
-
public function setHeader( $header ) {
|
19 |
-
$this->header = $header;
|
20 |
-
}
|
21 |
-
|
22 |
-
public function getHeader() {
|
23 |
-
return $this->header;
|
24 |
-
}
|
25 |
-
|
26 |
-
public function setBody( $body ) {
|
27 |
-
$this->body = $body;
|
28 |
-
}
|
29 |
-
|
30 |
-
public function getBody() {
|
31 |
-
return $this->body;
|
32 |
-
}
|
33 |
-
|
34 |
-
public function setData( $data ) {
|
35 |
-
$this->data = $data;
|
36 |
-
}
|
37 |
-
|
38 |
-
public function getData() {
|
39 |
-
return $this->data;
|
40 |
-
}
|
41 |
-
|
42 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
lib/cert/cacerts.pem
DELETED
@@ -1,4057 +0,0 @@
|
|
1 |
-
# Certifcate Authority certificates for validating SSL connections.
|
2 |
-
#
|
3 |
-
# This file contains PEM format certificates generated from
|
4 |
-
# http://mxr.mozilla.org/seamonkey/source/security/nss/lib/ckfw/builtins/certdata.txt
|
5 |
-
#
|
6 |
-
# ***** BEGIN LICENSE BLOCK *****
|
7 |
-
# Version: MPL 1.1/GPL 2.0/LGPL 2.1
|
8 |
-
#
|
9 |
-
# The contents of this file are subject to the Mozilla Public License Version
|
10 |
-
# 1.1 (the "License"); you may not use this file except in compliance with
|
11 |
-
# the License. You may obtain a copy of the License at
|
12 |
-
# http://www.mozilla.org/MPL/
|
13 |
-
#
|
14 |
-
# Software distributed under the License is distributed on an "AS IS" basis,
|
15 |
-
# WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
|
16 |
-
# for the specific language governing rights and limitations under the
|
17 |
-
# License.
|
18 |
-
#
|
19 |
-
# The Original Code is the Netscape security libraries.
|
20 |
-
#
|
21 |
-
# The Initial Developer of the Original Code is
|
22 |
-
# Netscape Communications Corporation.
|
23 |
-
# Portions created by the Initial Developer are Copyright (C) 1994-2000
|
24 |
-
# the Initial Developer. All Rights Reserved.
|
25 |
-
#
|
26 |
-
# Contributor(s):
|
27 |
-
#
|
28 |
-
# Alternatively, the contents of this file may be used under the terms of
|
29 |
-
# either the GNU General Public License Version 2 or later (the "GPL"), or
|
30 |
-
# the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
|
31 |
-
# in which case the provisions of the GPL or the LGPL are applicable instead
|
32 |
-
# of those above. If you wish to allow use of your version of this file only
|
33 |
-
# under the terms of either the GPL or the LGPL, and not to allow others to
|
34 |
-
# use your version of this file under the terms of the MPL, indicate your
|
35 |
-
# decision by deleting the provisions above and replace them with the notice
|
36 |
-
# and other provisions required by the GPL or the LGPL. If you do not delete
|
37 |
-
# the provisions above, a recipient may use your version of this file under
|
38 |
-
# the terms of any one of the MPL, the GPL or the LGPL.
|
39 |
-
#
|
40 |
-
# ***** END LICENSE BLOCK *****
|
41 |
-
|
42 |
-
Verisign/RSA Secure Server CA
|
43 |
-
=============================
|
44 |
-
|
45 |
-
-----BEGIN CERTIFICATE-----
|
46 |
-
MIICNDCCAaECEAKtZn5ORf5eV288mBle3cAwDQYJKoZIhvcNAQECBQAwXzELMAkG
|
47 |
-
A1UEBhMCVVMxIDAeBgNVBAoTF1JTQSBEYXRhIFNlY3VyaXR5LCBJbmMuMS4wLAYD
|
48 |
-
VQQLEyVTZWN1cmUgU2VydmVyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTk0
|
49 |
-
MTEwOTAwMDAwMFoXDTEwMDEwNzIzNTk1OVowXzELMAkGA1UEBhMCVVMxIDAeBgNV
|
50 |
-
BAoTF1JTQSBEYXRhIFNlY3VyaXR5LCBJbmMuMS4wLAYDVQQLEyVTZWN1cmUgU2Vy
|
51 |
-
dmVyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGbMA0GCSqGSIb3DQEBAQUAA4GJ
|
52 |
-
ADCBhQJ+AJLOesGugz5aqomDV6wlAXYMra6OLDfO6zV4ZFQD5YRAUcm/jwjiioII
|
53 |
-
0haGN1XpsSECrXZogZoFokvJSyVmIlZsiAeP94FZbYQHZXATcXY+m3dM41CJVphI
|
54 |
-
uR2nKRoTLkoRWZweFdVJVCxzOmmCsZc5nG1wZ0jl3S3WyB57AgMBAAEwDQYJKoZI
|
55 |
-
hvcNAQECBQADfgBl3X7hsuyw4jrg7HFGmhkRuNPHoLQDQCYCPgmc4RKz0Vr2N6W3
|
56 |
-
YQO2WxZpO8ZECAyIUwxrl0nHPjXcbLm7qt9cuzovk2C2qUtN8iD3zV9/ZHuO3ABc
|
57 |
-
1/p3yjkWWW8O6tO1g39NTUJWdrTJXwT4OPjr0l91X817/OWOgHz8UA==
|
58 |
-
-----END CERTIFICATE-----
|
59 |
-
|
60 |
-
Thawte Personal Basic CA
|
61 |
-
========================
|
62 |
-
|
63 |
-
-----BEGIN CERTIFICATE-----
|
64 |
-
MIIDITCCAoqgAwIBAgIBADANBgkqhkiG9w0BAQQFADCByzELMAkGA1UEBhMCWkEx
|
65 |
-
FTATBgNVBAgTDFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMRowGAYD
|
66 |
-
VQQKExFUaGF3dGUgQ29uc3VsdGluZzEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBT
|
67 |
-
ZXJ2aWNlcyBEaXZpc2lvbjEhMB8GA1UEAxMYVGhhd3RlIFBlcnNvbmFsIEJhc2lj
|
68 |
-
IENBMSgwJgYJKoZIhvcNAQkBFhlwZXJzb25hbC1iYXNpY0B0aGF3dGUuY29tMB4X
|
69 |
-
DTk2MDEwMTAwMDAwMFoXDTIwMTIzMTIzNTk1OVowgcsxCzAJBgNVBAYTAlpBMRUw
|
70 |
-
EwYDVQQIEwxXZXN0ZXJuIENhcGUxEjAQBgNVBAcTCUNhcGUgVG93bjEaMBgGA1UE
|
71 |
-
ChMRVGhhd3RlIENvbnN1bHRpbmcxKDAmBgNVBAsTH0NlcnRpZmljYXRpb24gU2Vy
|
72 |
-
dmljZXMgRGl2aXNpb24xITAfBgNVBAMTGFRoYXd0ZSBQZXJzb25hbCBCYXNpYyBD
|
73 |
-
QTEoMCYGCSqGSIb3DQEJARYZcGVyc29uYWwtYmFzaWNAdGhhd3RlLmNvbTCBnzAN
|
74 |
-
BgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAvLyTU23AUE+CFeZIlDWmWr5vQvoPR+53
|
75 |
-
dXLdjUmbllegeNTKP1GzaQuRdhciB5dqxFGTS+CN7zeVoQxN2jSQHReJl+A1OFdK
|
76 |
-
wPQIcOk8RHtQfmGakOMj04gRRif1CwcOu93RfyAKiLlWCy4cgNrx454p7xS9CkT7
|
77 |
-
G1sY0b8jkyECAwEAAaMTMBEwDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQQF
|
78 |
-
AAOBgQAt4plrsD16iddZopQBHyvdEktTwq1/qqcAXJFAVyVKOKqEcLnZgA+le1z7
|
79 |
-
c8a914phXAPjLSeoF+CEhULcXpvGt7Jtu3Sv5D/Lp7ew4F2+eIMllNLbgQ95B21P
|
80 |
-
9DkVWlIBe94y1k049hJcBlDfBVu9FEuh3ym6O0GN92NWod8isQ==
|
81 |
-
-----END CERTIFICATE-----
|
82 |
-
|
83 |
-
Thawte Personal Premium CA
|
84 |
-
==========================
|
85 |
-
|
86 |
-
-----BEGIN CERTIFICATE-----
|
87 |
-
MIIDKTCCApKgAwIBAgIBADANBgkqhkiG9w0BAQQFADCBzzELMAkGA1UEBhMCWkEx
|
88 |
-
FTATBgNVBAgTDFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMRowGAYD
|
89 |
-
VQQKExFUaGF3dGUgQ29uc3VsdGluZzEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBT
|
90 |
-
ZXJ2aWNlcyBEaXZpc2lvbjEjMCEGA1UEAxMaVGhhd3RlIFBlcnNvbmFsIFByZW1p
|
91 |
-
dW0gQ0ExKjAoBgkqhkiG9w0BCQEWG3BlcnNvbmFsLXByZW1pdW1AdGhhd3RlLmNv
|
92 |
-
bTAeFw05NjAxMDEwMDAwMDBaFw0yMDEyMzEyMzU5NTlaMIHPMQswCQYDVQQGEwJa
|
93 |
-
QTEVMBMGA1UECBMMV2VzdGVybiBDYXBlMRIwEAYDVQQHEwlDYXBlIFRvd24xGjAY
|
94 |
-
BgNVBAoTEVRoYXd0ZSBDb25zdWx0aW5nMSgwJgYDVQQLEx9DZXJ0aWZpY2F0aW9u
|
95 |
-
IFNlcnZpY2VzIERpdmlzaW9uMSMwIQYDVQQDExpUaGF3dGUgUGVyc29uYWwgUHJl
|
96 |
-
bWl1bSBDQTEqMCgGCSqGSIb3DQEJARYbcGVyc29uYWwtcHJlbWl1bUB0aGF3dGUu
|
97 |
-
Y29tMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDJZtn4B0TPuYwu8KHvE0Vs
|
98 |
-
Bd/eJxZRNkERbGw77f4QfRKe5ZtCmv5gMcNmt3M6SK5O0DI3lIi1DbbZ8/JE2dWI
|
99 |
-
Et12TfIa/G8jHnrx2JhFTgcQ7xZC0EN1bUre4qrJMf8fAHB8Zs8QJQi6+u4A6UYD
|
100 |
-
ZicRFTuqW/KY3TZCstqIdQIDAQABoxMwETAPBgNVHRMBAf8EBTADAQH/MA0GCSqG
|
101 |
-
SIb3DQEBBAUAA4GBAGk2ifc0KjNyL2071CKyuG+axTZmDhs8obF1Wub9NdP4qPIH
|
102 |
-
b4Vnjt4rueIXsDqg8A6iAJrf8xQVbrvIhVqYgPn/vnQdPfP+MCXRNzRn+qVxeTBh
|
103 |
-
KXLA4CxM+1bkOqhv5TJZUtt1KFBZDPgLGeSs2a+WjS9Q2wfD6h+rM+D1KzGJ
|
104 |
-
-----END CERTIFICATE-----
|
105 |
-
|
106 |
-
Thawte Personal Freemail CA
|
107 |
-
===========================
|
108 |
-
|
109 |
-
-----BEGIN CERTIFICATE-----
|
110 |
-
MIIDLTCCApagAwIBAgIBADANBgkqhkiG9w0BAQQFADCB0TELMAkGA1UEBhMCWkEx
|
111 |
-
FTATBgNVBAgTDFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMRowGAYD
|
112 |
-
VQQKExFUaGF3dGUgQ29uc3VsdGluZzEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBT
|
113 |
-
ZXJ2aWNlcyBEaXZpc2lvbjEkMCIGA1UEAxMbVGhhd3RlIFBlcnNvbmFsIEZyZWVt
|
114 |
-
YWlsIENBMSswKQYJKoZIhvcNAQkBFhxwZXJzb25hbC1mcmVlbWFpbEB0aGF3dGUu
|
115 |
-
Y29tMB4XDTk2MDEwMTAwMDAwMFoXDTIwMTIzMTIzNTk1OVowgdExCzAJBgNVBAYT
|
116 |
-
AlpBMRUwEwYDVQQIEwxXZXN0ZXJuIENhcGUxEjAQBgNVBAcTCUNhcGUgVG93bjEa
|
117 |
-
MBgGA1UEChMRVGhhd3RlIENvbnN1bHRpbmcxKDAmBgNVBAsTH0NlcnRpZmljYXRp
|
118 |
-
b24gU2VydmljZXMgRGl2aXNpb24xJDAiBgNVBAMTG1RoYXd0ZSBQZXJzb25hbCBG
|
119 |
-
cmVlbWFpbCBDQTErMCkGCSqGSIb3DQEJARYccGVyc29uYWwtZnJlZW1haWxAdGhh
|
120 |
-
d3RlLmNvbTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA1GnX1LCUZFtx6UfY
|
121 |
-
DFG26nKRsIRefS0Nj3sS34UldSh0OkIsYyeflXtL734Zhx2G6qPduc6WZBrCFG5E
|
122 |
-
rHzmj+hND3EfQDimAKOHePb5lIZererAXnbr2RSjXW56fAylS1V/Bhkpf56aJtVq
|
123 |
-
uzgkCGqYx7Hao5iR/Xnb5VrEHLkCAwEAAaMTMBEwDwYDVR0TAQH/BAUwAwEB/zAN
|
124 |
-
BgkqhkiG9w0BAQQFAAOBgQDH7JJ+Tvj1lqVnYiqk8E0RYNBvjWBYYawmu1I1XAjP
|
125 |
-
MPuoSpaKH2JCI4wXD/S6ZJwXrEcp352YXtJsYHFcoqzceePnbgBHH7UNKOgCneSa
|
126 |
-
/RP0ptl8sfjcXyMmCZGAc9AUG95DqYMl8uacLxXK/qarigd1iwzdUYRr5PjRznei
|
127 |
-
gQ==
|
128 |
-
-----END CERTIFICATE-----
|
129 |
-
|
130 |
-
Thawte Server CA
|
131 |
-
================
|
132 |
-
|
133 |
-
-----BEGIN CERTIFICATE-----
|
134 |
-
MIIDEzCCAnygAwIBAgIBATANBgkqhkiG9w0BAQQFADCBxDELMAkGA1UEBhMCWkEx
|
135 |
-
FTATBgNVBAgTDFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMR0wGwYD
|
136 |
-
VQQKExRUaGF3dGUgQ29uc3VsdGluZyBjYzEoMCYGA1UECxMfQ2VydGlmaWNhdGlv
|
137 |
-
biBTZXJ2aWNlcyBEaXZpc2lvbjEZMBcGA1UEAxMQVGhhd3RlIFNlcnZlciBDQTEm
|
138 |
-
MCQGCSqGSIb3DQEJARYXc2VydmVyLWNlcnRzQHRoYXd0ZS5jb20wHhcNOTYwODAx
|
139 |
-
MDAwMDAwWhcNMjAxMjMxMjM1OTU5WjCBxDELMAkGA1UEBhMCWkExFTATBgNVBAgT
|
140 |
-
DFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMR0wGwYDVQQKExRUaGF3
|
141 |
-
dGUgQ29uc3VsdGluZyBjYzEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2aWNl
|
142 |
-
cyBEaXZpc2lvbjEZMBcGA1UEAxMQVGhhd3RlIFNlcnZlciBDQTEmMCQGCSqGSIb3
|
143 |
-
DQEJARYXc2VydmVyLWNlcnRzQHRoYXd0ZS5jb20wgZ8wDQYJKoZIhvcNAQEBBQAD
|
144 |
-
gY0AMIGJAoGBANOkUG7I/1Zr5s9dtuoMaHVHoqrC2oQl/Kj0R1HahbUgdJSGHg91
|
145 |
-
yekIYfUGbTBuFRkC6VLAYttNmZ7iagxEOM3+vuNkCXDF/rFrKbYvScg71CcEJRCX
|
146 |
-
L+eQbcAoQpnXTEPew/UhbVSfXcNY4cDk2VuwuNy0e982OsK1ZiIS1ocNAgMBAAGj
|
147 |
-
EzARMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEEBQADgYEAB/pMaVz7lcxG
|
148 |
-
7oWDTSEwjsrZqG9JGubaUeNgcGyEYRGhGshIPllDfU+VPaGLtwtimHp1it2ITk6e
|
149 |
-
QNuozDJ0uW8NxuOzRAvZim+aKZuZGCg70eNAKJpaPNW15yAbi8qkq43pUdniTCxZ
|
150 |
-
qdq5snUb9kLy78fyGPmJvKP/iiMucEc=
|
151 |
-
-----END CERTIFICATE-----
|
152 |
-
|
153 |
-
Thawte Premium Server CA
|
154 |
-
========================
|
155 |
-
|
156 |
-
-----BEGIN CERTIFICATE-----
|
157 |
-
MIIDJzCCApCgAwIBAgIBATANBgkqhkiG9w0BAQQFADCBzjELMAkGA1UEBhMCWkEx
|
158 |
-
FTATBgNVBAgTDFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMR0wGwYD
|
159 |
-
VQQKExRUaGF3dGUgQ29uc3VsdGluZyBjYzEoMCYGA1UECxMfQ2VydGlmaWNhdGlv
|
160 |
-
biBTZXJ2aWNlcyBEaXZpc2lvbjEhMB8GA1UEAxMYVGhhd3RlIFByZW1pdW0gU2Vy
|
161 |
-
dmVyIENBMSgwJgYJKoZIhvcNAQkBFhlwcmVtaXVtLXNlcnZlckB0aGF3dGUuY29t
|
162 |
-
MB4XDTk2MDgwMTAwMDAwMFoXDTIwMTIzMTIzNTk1OVowgc4xCzAJBgNVBAYTAlpB
|
163 |
-
MRUwEwYDVQQIEwxXZXN0ZXJuIENhcGUxEjAQBgNVBAcTCUNhcGUgVG93bjEdMBsG
|
164 |
-
A1UEChMUVGhhd3RlIENvbnN1bHRpbmcgY2MxKDAmBgNVBAsTH0NlcnRpZmljYXRp
|
165 |
-
b24gU2VydmljZXMgRGl2aXNpb24xITAfBgNVBAMTGFRoYXd0ZSBQcmVtaXVtIFNl
|
166 |
-
cnZlciBDQTEoMCYGCSqGSIb3DQEJARYZcHJlbWl1bS1zZXJ2ZXJAdGhhd3RlLmNv
|
167 |
-
bTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA0jY2aovXwlue2oFBYo847kkE
|
168 |
-
VdbQ7xwblRZH7xhINTpS9CtqBo87L+pW46+GjZ4X9560ZXUCTe/LCaIhUdib0GfQ
|
169 |
-
ug2SBhRz1JPLlyoAnFxODLz6FVL88kRu2hFKbgifLy3j+ao6hnO2RlNYyIkFvYMR
|
170 |
-
uHM/qgeN9EJN50CdHDcCAwEAAaMTMBEwDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG
|
171 |
-
9w0BAQQFAAOBgQAmSCwWwlj66BZ0DKqqX1Q/8tfJeGBeXm43YyJ3Nn6yF8Q0ufUI
|
172 |
-
hfzJATj/Tb7yFkJD57taRvvBxhEf8UqwKEbJw8RCfbz6q1lu1bdRiBHjpIUZa4JM
|
173 |
-
pAwSremkrj/xw0llmozFyD4lt5SZu5IycQfwhl7tUCemDaYj+bvLpgcUQg==
|
174 |
-
-----END CERTIFICATE-----
|
175 |
-
|
176 |
-
Equifax Secure CA
|
177 |
-
=================
|
178 |
-
|
179 |
-
-----BEGIN CERTIFICATE-----
|
180 |
-
MIIDIDCCAomgAwIBAgIENd70zzANBgkqhkiG9w0BAQUFADBOMQswCQYDVQQGEwJV
|
181 |
-
UzEQMA4GA1UEChMHRXF1aWZheDEtMCsGA1UECxMkRXF1aWZheCBTZWN1cmUgQ2Vy
|
182 |
-
dGlmaWNhdGUgQXV0aG9yaXR5MB4XDTk4MDgyMjE2NDE1MVoXDTE4MDgyMjE2NDE1
|
183 |
-
MVowTjELMAkGA1UEBhMCVVMxEDAOBgNVBAoTB0VxdWlmYXgxLTArBgNVBAsTJEVx
|
184 |
-
dWlmYXggU2VjdXJlIENlcnRpZmljYXRlIEF1dGhvcml0eTCBnzANBgkqhkiG9w0B
|
185 |
-
AQEFAAOBjQAwgYkCgYEAwV2xWGcIYu6gmi0fCG2RFGiYCh7+2gRvE4RiIcPRfM6f
|
186 |
-
BeC4AfBONOziipUEZKzxa1NfBbPLZ4C/QgKO/t0BCezhABRP/PvwDN1Dulsr4R+A
|
187 |
-
cJkVV5MW8Q+XarfCaCMczE1ZMKxRHjuvK9buY0V7xdlfUNLjUA86iOe/FP3gx7kC
|
188 |
-
AwEAAaOCAQkwggEFMHAGA1UdHwRpMGcwZaBjoGGkXzBdMQswCQYDVQQGEwJVUzEQ
|
189 |
-
MA4GA1UEChMHRXF1aWZheDEtMCsGA1UECxMkRXF1aWZheCBTZWN1cmUgQ2VydGlm
|
190 |
-
aWNhdGUgQXV0aG9yaXR5MQ0wCwYDVQQDEwRDUkwxMBoGA1UdEAQTMBGBDzIwMTgw
|
191 |
-
ODIyMTY0MTUxWjALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAUSOZo+SvSspXXR9gj
|
192 |
-
IBBPM5iQn9QwHQYDVR0OBBYEFEjmaPkr0rKV10fYIyAQTzOYkJ/UMAwGA1UdEwQF
|
193 |
-
MAMBAf8wGgYJKoZIhvZ9B0EABA0wCxsFVjMuMGMDAgbAMA0GCSqGSIb3DQEBBQUA
|
194 |
-
A4GBAFjOKer89961zgK5F7WF0bnj4JXMJTENAKaSbn+2kmOeUJXRmm/kEd5jhW6Y
|
195 |
-
7qj/WsjTVbJmcVfewCHrPSqnI0kBBIZCe/zuf6IWUrVnZ9NA2zsmWLIodz2uFHdh
|
196 |
-
1voqZiegDfqnc1zqcPGUIWVEX/r87yloqaKHee9570+sB3c4
|
197 |
-
-----END CERTIFICATE-----
|
198 |
-
|
199 |
-
Verisign Class 1 Public Primary Certification Authority
|
200 |
-
=======================================================
|
201 |
-
|
202 |
-
-----BEGIN CERTIFICATE-----
|
203 |
-
MIICPTCCAaYCEQDNun9W8N/kvFT+IqyzcqpVMA0GCSqGSIb3DQEBAgUAMF8xCzAJ
|
204 |
-
BgNVBAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE3MDUGA1UECxMuQ2xh
|
205 |
-
c3MgMSBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw05
|
206 |
-
NjAxMjkwMDAwMDBaFw0yODA4MDEyMzU5NTlaMF8xCzAJBgNVBAYTAlVTMRcwFQYD
|
207 |
-
VQQKEw5WZXJpU2lnbiwgSW5jLjE3MDUGA1UECxMuQ2xhc3MgMSBQdWJsaWMgUHJp
|
208 |
-
bWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCBnzANBgkqhkiG9w0BAQEFAAOB
|
209 |
-
jQAwgYkCgYEA5Rm/baNWYS2ZSHH2Z965jeu3noaACpEO+jglr0aIguVzqKCbJF0N
|
210 |
-
H8xlbgyw0FaEGIeaBpsQoXPftFg5a27B9hXVqKg/qhIGjTGsf7A01480Z4gJzRQR
|
211 |
-
4k5FVmkfeAKA2txHkSm7NsljXMXg1y2He6G3MrB7MLoqLzGq7qNn2tsCAwEAATAN
|
212 |
-
BgkqhkiG9w0BAQIFAAOBgQBMP7iLxmjf7kMzDl3ppssHhE16M/+SG/Q2rdiVIjZo
|
213 |
-
EWx8QszznC7EBz8UsA9P/5CSdvnivErpj82ggAr3xSnxgiJduLHdgSOjeyUVRjB5
|
214 |
-
FvjqBUuUfx3CHMjjt/QQQDwTw18fU+hI5Ia0e6E1sHslurjTjqs/OJ0ANACY89Fx
|
215 |
-
lA==
|
216 |
-
-----END CERTIFICATE-----
|
217 |
-
|
218 |
-
Verisign Class 2 Public Primary Certification Authority
|
219 |
-
=======================================================
|
220 |
-
|
221 |
-
-----BEGIN CERTIFICATE-----
|
222 |
-
MIICPDCCAaUCEC0b/EoXjaOR6+f/9YtFvgswDQYJKoZIhvcNAQECBQAwXzELMAkG
|
223 |
-
A1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFz
|
224 |
-
cyAyIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTk2
|
225 |
-
MDEyOTAwMDAwMFoXDTI4MDgwMTIzNTk1OVowXzELMAkGA1UEBhMCVVMxFzAVBgNV
|
226 |
-
BAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFzcyAyIFB1YmxpYyBQcmlt
|
227 |
-
YXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGfMA0GCSqGSIb3DQEBAQUAA4GN
|
228 |
-
ADCBiQKBgQC2WoujDWojg4BrzzmH9CETMwZMJaLtVRKXxaeAufqDwSCg+i8VDXyh
|
229 |
-
YGt+eSz6Bg86rvYbb7HS/y8oUl+DfUvEerf4Zh+AVPy3wo5ZShRXRtGak75BkQO7
|
230 |
-
FYCTXOvnzAhsPz6zSvz/S2wj1VCCJkQZjiPDceoZJEcEnnW/yKYAHwIDAQABMA0G
|
231 |
-
CSqGSIb3DQEBAgUAA4GBAIobK/o5wXTXXtgZZKJYSi034DNHD6zt96rbHuSLBlxg
|
232 |
-
J8pFUs4W7z8GZOeUaHxgMxURaa+dYo2jA1Rrpr7l7gUYYAS/QoD90KioHgE796Nc
|
233 |
-
r6Pc5iaAIzy4RHT3Cq5Ji2F4zCS/iIqnDupzGUH9TQPwiNHleI2lKk/2lw0Xd8rY
|
234 |
-
-----END CERTIFICATE-----
|
235 |
-
|
236 |
-
Verisign Class 3 Public Primary Certification Authority
|
237 |
-
=======================================================
|
238 |
-
|
239 |
-
-----BEGIN CERTIFICATE-----
|
240 |
-
MIICPDCCAaUCEHC65B0Q2Sk0tjjKewPMur8wDQYJKoZIhvcNAQECBQAwXzELMAkG
|
241 |
-
A1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFz
|
242 |
-
cyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTk2
|
243 |
-
MDEyOTAwMDAwMFoXDTI4MDgwMTIzNTk1OVowXzELMAkGA1UEBhMCVVMxFzAVBgNV
|
244 |
-
BAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFzcyAzIFB1YmxpYyBQcmlt
|
245 |
-
YXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGfMA0GCSqGSIb3DQEBAQUAA4GN
|
246 |
-
ADCBiQKBgQDJXFme8huKARS0EN8EQNvjV69qRUCPhAwL0TPZ2RHP7gJYHyX3KqhE
|
247 |
-
BarsAx94f56TuZoAqiN91qyFomNFx3InzPRMxnVx0jnvT0Lwdd8KkMaOIG+YD/is
|
248 |
-
I19wKTakyYbnsZogy1Olhec9vn2a/iRFM9x2Fe0PonFkTGUugWhFpwIDAQABMA0G
|
249 |
-
CSqGSIb3DQEBAgUAA4GBALtMEivPLCYATxQT3ab7/AoRhIzzKBxnki98tsX63/Do
|
250 |
-
lbwdj2wsqFHMc9ikwFPwTtYmwHYBV4GSXiHx0bH/59AhWM1pF+NEHJwZRDmJXNyc
|
251 |
-
AA9WjQKZ7aKQRUzkuxCkPfAyAw7xzvjoyVGM5mKf5p/AfbdynMk2OmufTqj/ZA1k
|
252 |
-
-----END CERTIFICATE-----
|
253 |
-
|
254 |
-
Verisign Class 1 Public Primary Certification Authority - G2
|
255 |
-
============================================================
|
256 |
-
|
257 |
-
-----BEGIN CERTIFICATE-----
|
258 |
-
MIIDAjCCAmsCEEzH6qqYPnHTkxD4PTqJkZIwDQYJKoZIhvcNAQEFBQAwgcExCzAJ
|
259 |
-
BgNVBAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xh
|
260 |
-
c3MgMSBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcy
|
261 |
-
MTowOAYDVQQLEzEoYykgMTk5OCBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3Jp
|
262 |
-
emVkIHVzZSBvbmx5MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMB4X
|
263 |
-
DTk4MDUxODAwMDAwMFoXDTI4MDgwMTIzNTk1OVowgcExCzAJBgNVBAYTAlVTMRcw
|
264 |
-
FQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xhc3MgMSBQdWJsaWMg
|
265 |
-
UHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcyMTowOAYDVQQLEzEo
|
266 |
-
YykgMTk5OCBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5
|
267 |
-
MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMIGfMA0GCSqGSIb3DQEB
|
268 |
-
AQUAA4GNADCBiQKBgQCq0Lq+Fi24g9TK0g+8djHKlNgdk4xWArzZbxpvUjZudVYK
|
269 |
-
VdPfQ4chEWWKfo+9Id5rMj8bhDSVBZ1BNeuS65bdqlk/AVNtmU/t5eIqWpDBucSm
|
270 |
-
Fc/IReumXY6cPvBkJHalzasab7bYe1FhbqZ/h8jit+U03EGI6glAvnOSPWvndQID
|
271 |
-
AQABMA0GCSqGSIb3DQEBBQUAA4GBAKlPww3HZ74sy9mozS11534Vnjty637rXC0J
|
272 |
-
h9ZrbWB85a7FkCMMXErQr7Fd88e2CtvgFZMN3QO8x3aKtd1Pw5sTdbgBwObJW2ul
|
273 |
-
uIncrKTdcu1OofdPvAbT6shkdHvClUGcZXNY8ZCaPGqxmMnEh7zPRW1F4m4iP/68
|
274 |
-
DzFc6PLZ
|
275 |
-
-----END CERTIFICATE-----
|
276 |
-
|
277 |
-
Verisign Class 2 Public Primary Certification Authority - G2
|
278 |
-
============================================================
|
279 |
-
|
280 |
-
-----BEGIN CERTIFICATE-----
|
281 |
-
MIIDAzCCAmwCEQC5L2DMiJ+hekYJuFtwbIqvMA0GCSqGSIb3DQEBBQUAMIHBMQsw
|
282 |
-
CQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xPDA6BgNVBAsTM0Ns
|
283 |
-
YXNzIDIgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBH
|
284 |
-
MjE6MDgGA1UECxMxKGMpIDE5OTggVmVyaVNpZ24sIEluYy4gLSBGb3IgYXV0aG9y
|
285 |
-
aXplZCB1c2Ugb25seTEfMB0GA1UECxMWVmVyaVNpZ24gVHJ1c3QgTmV0d29yazAe
|
286 |
-
Fw05ODA1MTgwMDAwMDBaFw0yODA4MDEyMzU5NTlaMIHBMQswCQYDVQQGEwJVUzEX
|
287 |
-
MBUGA1UEChMOVmVyaVNpZ24sIEluYy4xPDA6BgNVBAsTM0NsYXNzIDIgUHVibGlj
|
288 |
-
IFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMjE6MDgGA1UECxMx
|
289 |
-
KGMpIDE5OTggVmVyaVNpZ24sIEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25s
|
290 |
-
eTEfMB0GA1UECxMWVmVyaVNpZ24gVHJ1c3QgTmV0d29yazCBnzANBgkqhkiG9w0B
|
291 |
-
AQEFAAOBjQAwgYkCgYEAp4gBIXQs5xoD8JjhlzwPIQjxnNuX6Zr8wgQGE75fUsjM
|
292 |
-
HiwSViy4AWkszJkfrbCWrnkE8hM5wXuYuggs6MKEEyyqaekJ9MepAqRCwiNPStjw
|
293 |
-
DqL7MWzJ5m+ZJwf15vRMeJ5t60aG+rmGyVTyssSv1EYcWskVMP8NbPUtDm3Of3cC
|
294 |
-
AwEAATANBgkqhkiG9w0BAQUFAAOBgQByLvl/0fFx+8Se9sVeUYpAmLho+Jscg9ji
|
295 |
-
nb3/7aHmZuovCfTK1+qlK5X2JGCGTUQug6XELaDTrnhpb3LabK4I8GOSN+a7xDAX
|
296 |
-
rXfMSTWqz9iP0b63GJZHc2pUIjRkLbYWm1lbtFFZOrMLFPQS32eg9K0yZF6xRnIn
|
297 |
-
jBJ7xUS0rg==
|
298 |
-
-----END CERTIFICATE-----
|
299 |
-
|
300 |
-
Verisign Class 3 Public Primary Certification Authority - G2
|
301 |
-
============================================================
|
302 |
-
|
303 |
-
-----BEGIN CERTIFICATE-----
|
304 |
-
MIIDAjCCAmsCEH3Z/gfPqB63EHln+6eJNMYwDQYJKoZIhvcNAQEFBQAwgcExCzAJ
|
305 |
-
BgNVBAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xh
|
306 |
-
c3MgMyBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcy
|
307 |
-
MTowOAYDVQQLEzEoYykgMTk5OCBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3Jp
|
308 |
-
emVkIHVzZSBvbmx5MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMB4X
|
309 |
-
DTk4MDUxODAwMDAwMFoXDTI4MDgwMTIzNTk1OVowgcExCzAJBgNVBAYTAlVTMRcw
|
310 |
-
FQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xhc3MgMyBQdWJsaWMg
|
311 |
-
UHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcyMTowOAYDVQQLEzEo
|
312 |
-
YykgMTk5OCBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5
|
313 |
-
MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMIGfMA0GCSqGSIb3DQEB
|
314 |
-
AQUAA4GNADCBiQKBgQDMXtERXVxp0KvTuWpMmR9ZmDCOFoUgRm1HP9SFIIThbbP4
|
315 |
-
pO0M8RcPO/mn+SXXwc+EY/J8Y8+iR/LGWzOOZEAEaMGAuWQcRXfH2G71lSk8UOg0
|
316 |
-
13gfqLptQ5GVj0VXXn7F+8qkBOvqlzdUMG+7AUcyM83cV5tkaWH4mx0ciU9cZwID
|
317 |
-
AQABMA0GCSqGSIb3DQEBBQUAA4GBAFFNzb5cy5gZnBWyATl4Lk0PZ3BwmcYQWpSk
|
318 |
-
U01UbSuvDV1Ai2TT1+7eVmGSX6bEHRBhNtMsJzzoKQm5EWR0zLVznxxIqbxhAe7i
|
319 |
-
F6YM40AIOw7n60RzKprxaZLvcRTDOaxxp5EJb+RxBrO6WVcmeQD2+A2iMzAo1KpY
|
320 |
-
oJ2daZH9
|
321 |
-
-----END CERTIFICATE-----
|
322 |
-
|
323 |
-
Verisign Class 4 Public Primary Certification Authority - G2
|
324 |
-
============================================================
|
325 |
-
|
326 |
-
-----BEGIN CERTIFICATE-----
|
327 |
-
MIIDAjCCAmsCEDKIjprS9esTR/h/xCA3JfgwDQYJKoZIhvcNAQEFBQAwgcExCzAJ
|
328 |
-
BgNVBAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xh
|
329 |
-
c3MgNCBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcy
|
330 |
-
MTowOAYDVQQLEzEoYykgMTk5OCBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3Jp
|
331 |
-
emVkIHVzZSBvbmx5MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMB4X
|
332 |
-
DTk4MDUxODAwMDAwMFoXDTI4MDgwMTIzNTk1OVowgcExCzAJBgNVBAYTAlVTMRcw
|
333 |
-
FQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xhc3MgNCBQdWJsaWMg
|
334 |
-
UHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcyMTowOAYDVQQLEzEo
|
335 |
-
YykgMTk5OCBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5
|
336 |
-
MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMIGfMA0GCSqGSIb3DQEB
|
337 |
-
AQUAA4GNADCBiQKBgQC68OTP+cSuhVS5B1f5j8V/aBH4xBewRNzjMHPVKmIquNDM
|
338 |
-
HO0oW369atyzkSTKQWI8/AIBvxwWMZQFl3Zuoq29YRdsTjCG8FE3KlDHqGKB3FtK
|
339 |
-
qsGgtG7rL+VXxbErQHDbWk2hjh+9Ax/YA9SPTJlxvOKCzFjomDqG04Y48wApHwID
|
340 |
-
AQABMA0GCSqGSIb3DQEBBQUAA4GBAIWMEsGnuVAVess+rLhDityq3RS6iYF+ATwj
|
341 |
-
cSGIL4LcY/oCRaxFWdcqWERbt5+BO5JoPeI3JPV7bI92NZYJqFmduc4jq3TWg/0y
|
342 |
-
cyfYaT5DdPauxYma51N86Xv2S/PBZYPejYqcPIiNOVn8qj8ijaHBZlCBckztImRP
|
343 |
-
T8qAkbYp
|
344 |
-
-----END CERTIFICATE-----
|
345 |
-
|
346 |
-
Verisign Class 1 Public Primary Certification Authority - G3
|
347 |
-
============================================================
|
348 |
-
|
349 |
-
-----BEGIN CERTIFICATE-----
|
350 |
-
MIIEGjCCAwICEQCLW3VWhFSFCwDPrzhIzrGkMA0GCSqGSIb3DQEBBQUAMIHKMQsw
|
351 |
-
CQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZl
|
352 |
-
cmlTaWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWdu
|
353 |
-
LCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlT
|
354 |
-
aWduIENsYXNzIDEgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3Jp
|
355 |
-
dHkgLSBHMzAeFw05OTEwMDEwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMIHKMQswCQYD
|
356 |
-
VQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlT
|
357 |
-
aWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJ
|
358 |
-
bmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWdu
|
359 |
-
IENsYXNzIDEgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkg
|
360 |
-
LSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAN2E1Lm0+afY8wR4
|
361 |
-
nN493GwTFtl63SRRZsDHJlkNrAYIwpTRMx/wgzUfbhvI3qpuFU5UJ+/EbRrsC+MO
|
362 |
-
8ESlV8dAWB6jRx9x7GD2bZTIGDnt/kIYVt/kTEkQeE4BdjVjEjbdZrwBBDajVWjV
|
363 |
-
ojYJrKshJlQGrT/KFOCsyq0GHZXi+J3x4GD/wn91K0zM2v6HmSHquv4+VNfSWXjb
|
364 |
-
PG7PoBMAGrgnoeS+Z5bKoMWznN3JdZ7rMJpfo83ZrngZPyPpXNspva1VyBtUjGP2
|
365 |
-
6KbqxzcSXKMpHgLZ2x87tNcPVkeBFQRKr4Mn0cVYiMHd9qqnoxjaaKptEVHhv2Vr
|
366 |
-
n5Z20T0CAwEAATANBgkqhkiG9w0BAQUFAAOCAQEAq2aN17O6x5q25lXQBfGfMY1a
|
367 |
-
qtmqRiYPce2lrVNWYgFHKkTp/j90CxObufRNG7LRX7K20ohcs5/Ny9Sn2WCVhDr4
|
368 |
-
wTcdYcrnsMXlkdpUpqwxga6X3s0IrLjAl4B/bnKk52kTlWUfxJM8/XmPBNQ+T+r3
|
369 |
-
ns7NZ3xPZQL/kYVUc8f/NveGLezQXk//EZ9yBta4GvFMDSZl4kSAHsef493oCtrs
|
370 |
-
pSCAaWihT37ha88HQfqDjrw43bAuEbFrskLMmrz5SCJ5ShkPshw+IHTZasO+8ih4
|
371 |
-
E1Z5T21Q6huwtVexN2ZYI/PcD98Kh8TvhgXVOBRgmaNL3gaWcSzy27YfpO8/7g==
|
372 |
-
-----END CERTIFICATE-----
|
373 |
-
|
374 |
-
Verisign Class 2 Public Primary Certification Authority - G3
|
375 |
-
============================================================
|
376 |
-
|
377 |
-
-----BEGIN CERTIFICATE-----
|
378 |
-
MIIEGTCCAwECEGFwy0mMX5hFKeewptlQW3owDQYJKoZIhvcNAQEFBQAwgcoxCzAJ
|
379 |
-
BgNVBAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjEfMB0GA1UECxMWVmVy
|
380 |
-
aVNpZ24gVHJ1c3QgTmV0d29yazE6MDgGA1UECxMxKGMpIDE5OTkgVmVyaVNpZ24s
|
381 |
-
IEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTFFMEMGA1UEAxM8VmVyaVNp
|
382 |
-
Z24gQ2xhc3MgMiBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0
|
383 |
-
eSAtIEczMB4XDTk5MTAwMTAwMDAwMFoXDTM2MDcxNjIzNTk1OVowgcoxCzAJBgNV
|
384 |
-
BAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjEfMB0GA1UECxMWVmVyaVNp
|
385 |
-
Z24gVHJ1c3QgTmV0d29yazE6MDgGA1UECxMxKGMpIDE5OTkgVmVyaVNpZ24sIElu
|
386 |
-
Yy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTFFMEMGA1UEAxM8VmVyaVNpZ24g
|
387 |
-
Q2xhc3MgMiBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAt
|
388 |
-
IEczMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEArwoNwtUs22e5LeWU
|
389 |
-
J92lvuCwTY+zYVY81nzD9M0+hsuiiOLh2KRpxbXiv8GmR1BeRjmL1Za6tW8UvxDO
|
390 |
-
JxOeBUebMXoT2B/Z0wI3i60sR/COgQanDTAM6/c8DyAd3HJG7qUCyFvDyVZpTMUY
|
391 |
-
wZF7C9UTAJu878NIPkZgIIUq1ZC2zYugzDLdt/1AVbJQHFauzI13TccgTacxdu9o
|
392 |
-
koqQHgiBVrKtaaNS0MscxCM9H5n+TOgWY47GCI72MfbS+uV23bUckqNJzc0BzWjN
|
393 |
-
qWm6o+sdDZykIKbBoMXRRkwXbdKsZj+WjOCE1Db/IlnF+RFgqF8EffIa9iVCYQ/E
|
394 |
-
Srg+iQIDAQABMA0GCSqGSIb3DQEBBQUAA4IBAQA0JhU8wI1NQ0kdvekhktdmnLfe
|
395 |
-
xbjQ5F1fdiLAJvmEOjr5jLX77GDx6M4EsMjdpwOPMPOY36TmpDHf0xwLRtxyID+u
|
396 |
-
7gU8pDM/CzmscHhzS5kr3zDCVLCoO1Wh/hYozUK9dG6A2ydEp85EXdQbkJgNHkKU
|
397 |
-
sQAsBNB0owIFImNjzYO1+8FtYmtpdf1dcEG59b98377BMnMiIYtYgXsVkXq642RI
|
398 |
-
sH/7NiXaldDxJBQX3RiAa0YjOVT1jmIJBB2UkKab5iXiQkWquJCtvgiPqQtCGJTP
|
399 |
-
cjnhsUPgKM+351psE2tJs//jGHyJizNdrDPXp/naOlXJWBD5qu9ats9LS98q
|
400 |
-
-----END CERTIFICATE-----
|
401 |
-
|
402 |
-
Verisign Class 3 Public Primary Certification Authority - G3
|
403 |
-
============================================================
|
404 |
-
|
405 |
-
-----BEGIN CERTIFICATE-----
|
406 |
-
MIIEGjCCAwICEQCbfgZJoz5iudXukEhxKe9XMA0GCSqGSIb3DQEBBQUAMIHKMQsw
|
407 |
-
CQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZl
|
408 |
-
cmlTaWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWdu
|
409 |
-
LCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlT
|
410 |
-
aWduIENsYXNzIDMgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3Jp
|
411 |
-
dHkgLSBHMzAeFw05OTEwMDEwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMIHKMQswCQYD
|
412 |
-
VQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlT
|
413 |
-
aWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJ
|
414 |
-
bmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWdu
|
415 |
-
IENsYXNzIDMgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkg
|
416 |
-
LSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMu6nFL8eB8aHm8b
|
417 |
-
N3O9+MlrlBIwT/A2R/XQkQr1F8ilYcEWQE37imGQ5XYgwREGfassbqb1EUGO+i2t
|
418 |
-
KmFZpGcmTNDovFJbcCAEWNF6yaRpvIMXZK0Fi7zQWM6NjPXr8EJJC52XJ2cybuGu
|
419 |
-
kxUccLwgTS8Y3pKI6GyFVxEa6X7jJhFUokWWVYPKMIno3Nij7SqAP395ZVc+FSBm
|
420 |
-
CC+Vk7+qRy+oRpfwEuL+wgorUeZ25rdGt+INpsyow0xZVYnm6FNcHOqd8GIWC6fJ
|
421 |
-
Xwzw3sJ2zq/3avL6QaaiMxTJ5Xpj055iN9WFZZ4O5lMkdBteHRJTW8cs54NJOxWu
|
422 |
-
imi5V5cCAwEAATANBgkqhkiG9w0BAQUFAAOCAQEAERSWwauSCPc/L8my/uRan2Te
|
423 |
-
2yFPhpk0djZX3dAVL8WtfxUfN2JzPtTnX84XA9s1+ivbrmAJXx5fj267Cz3qWhMe
|
424 |
-
DGBvtcC1IyIuBwvLqXTLR7sdwdela8wv0kL9Sd2nic9TutoAWii/gt/4uhMdUIaC
|
425 |
-
/Y4wjylGsB49Ndo4YhYYSq3mtlFs3q9i6wHQHiT+eo8SGhJouPtmmRQURVyu565p
|
426 |
-
F4ErWjfJXir0xuKhXFSbplQAz/DxwceYMBo7Nhbbo27q/a2ywtrvAkcTisDxszGt
|
427 |
-
TxzhT5yvDwyd93gN2PQ1VoDat20Xj50egWTh/sVFuq1ruQp6Tk9LhO5L8X3dEQ==
|
428 |
-
-----END CERTIFICATE-----
|
429 |
-
|
430 |
-
Verisign Class 4 Public Primary Certification Authority - G3
|
431 |
-
============================================================
|
432 |
-
|
433 |
-
-----BEGIN CERTIFICATE-----
|
434 |
-
MIIEGjCCAwICEQDsoKeLbnVqAc/EfMwvlF7XMA0GCSqGSIb3DQEBBQUAMIHKMQsw
|
435 |
-
CQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZl
|
436 |
-
cmlTaWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWdu
|
437 |
-
LCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlT
|
438 |
-
aWduIENsYXNzIDQgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3Jp
|
439 |
-
dHkgLSBHMzAeFw05OTEwMDEwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMIHKMQswCQYD
|
440 |
-
VQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlT
|
441 |
-
aWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJ
|
442 |
-
bmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWdu
|
443 |
-
IENsYXNzIDQgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkg
|
444 |
-
LSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAK3LpRFpxlmr8Y+1
|
445 |
-
GQ9Wzsy1HyDkniYlS+BzZYlZ3tCD5PUPtbut8XzoIfzk6AzufEUiGXaStBO3IFsJ
|
446 |
-
+mGuqPKljYXCKtbeZjbSmwL0qJJgfJxptI8kHtCGUvYynEFYHiK9zUVilQhu0Gbd
|
447 |
-
U6LM8BDcVHOLBKFGMzNcF0C5nk3T875Vg+ixiY5afJqWIpA7iCXy0lOIAgwLePLm
|
448 |
-
NxdLMEYH5IBtptiWLugs+BGzOA1mppvqySNb247i8xOOGlktqgLw7KSHZtzBP/XY
|
449 |
-
ufTsgsbSPZUd5cBPhMnZo0QoBmrXRazwa2rvTl/4EYIeOGM0ZlDUPpNz+jDDZq3/
|
450 |
-
ky2X7wMCAwEAATANBgkqhkiG9w0BAQUFAAOCAQEAj/ola09b5KROJ1WrIhVZPMq1
|
451 |
-
CtRK26vdoV9TxaBXOcLORyu+OshWv8LZJxA6sQU8wHcxuzrTBXttmhwwjIDLk5Mq
|
452 |
-
g6sFUYICABFna/OIYUdfA5PVWw3g8dShMjWFsjrbsIKr0csKvE+MW8VLADsfKoKm
|
453 |
-
fjaF3H48ZwC15DtS4KjrXRX5xm3wrR0OhbepmnMUWluPQSjA1egtTaRezarZ7c7c
|
454 |
-
2NU8Qh0XwRJdRTjDOPP8hS6DRkiy1yBfkjaP53kPmF6Z6PDQpLv1U70qzlmwr25/
|
455 |
-
bLvSHgCwIe34QWKCudiyxLtGUPMxxY8BqHTr9Xgn2uf3ZkPznoM+IKrDNWCRzg==
|
456 |
-
-----END CERTIFICATE-----
|
457 |
-
|
458 |
-
Equifax Secure Global eBusiness CA
|
459 |
-
==================================
|
460 |
-
|
461 |
-
-----BEGIN CERTIFICATE-----
|
462 |
-
MIICkDCCAfmgAwIBAgIBATANBgkqhkiG9w0BAQQFADBaMQswCQYDVQQGEwJVUzEc
|
463 |
-
MBoGA1UEChMTRXF1aWZheCBTZWN1cmUgSW5jLjEtMCsGA1UEAxMkRXF1aWZheCBT
|
464 |
-
ZWN1cmUgR2xvYmFsIGVCdXNpbmVzcyBDQS0xMB4XDTk5MDYyMTA0MDAwMFoXDTIw
|
465 |
-
MDYyMTA0MDAwMFowWjELMAkGA1UEBhMCVVMxHDAaBgNVBAoTE0VxdWlmYXggU2Vj
|
466 |
-
dXJlIEluYy4xLTArBgNVBAMTJEVxdWlmYXggU2VjdXJlIEdsb2JhbCBlQnVzaW5l
|
467 |
-
c3MgQ0EtMTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAuucXkAJlsTRVPEnC
|
468 |
-
UdXfp9E3j9HngXNBUmCbnaEXJnitx7HoJpQytd4zjTov2/KaelpzmKNc6fuKcxtc
|
469 |
-
58O/gGzNqfTWK8D3+ZmqY6KxRwIP1ORROhI8bIpaVIRw28HFkM9yRcuoWcDNM50/
|
470 |
-
o5brhTMhHD4ePmBudpxnhcXIw2ECAwEAAaNmMGQwEQYJYIZIAYb4QgEBBAQDAgAH
|
471 |
-
MA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAUvqigdHJQa0S3ySPY+6j/s1dr
|
472 |
-
aGwwHQYDVR0OBBYEFL6ooHRyUGtEt8kj2Puo/7NXa2hsMA0GCSqGSIb3DQEBBAUA
|
473 |
-
A4GBADDiAVGqx+pf2rnQZQ8w1j7aDRRJbpGTJxQx78T3LUX47Me/okENI7SS+RkA
|
474 |
-
Z70Br83gcfxaz2TE4JaY0KNA4gGK7ycH8WUBikQtBmV1UsCGECAhX2xrD2yuCRyv
|
475 |
-
8qIYNMR1pHMc8Y3c7635s3a0kr/clRAevsvIO1qEYBlWlKlV
|
476 |
-
-----END CERTIFICATE-----
|
477 |
-
|
478 |
-
Equifax Secure eBusiness CA 1
|
479 |
-
=============================
|
480 |
-
|
481 |
-
-----BEGIN CERTIFICATE-----
|
482 |
-
MIICgjCCAeugAwIBAgIBBDANBgkqhkiG9w0BAQQFADBTMQswCQYDVQQGEwJVUzEc
|
483 |
-
MBoGA1UEChMTRXF1aWZheCBTZWN1cmUgSW5jLjEmMCQGA1UEAxMdRXF1aWZheCBT
|
484 |
-
ZWN1cmUgZUJ1c2luZXNzIENBLTEwHhcNOTkwNjIxMDQwMDAwWhcNMjAwNjIxMDQw
|
485 |
-
MDAwWjBTMQswCQYDVQQGEwJVUzEcMBoGA1UEChMTRXF1aWZheCBTZWN1cmUgSW5j
|
486 |
-
LjEmMCQGA1UEAxMdRXF1aWZheCBTZWN1cmUgZUJ1c2luZXNzIENBLTEwgZ8wDQYJ
|
487 |
-
KoZIhvcNAQEBBQADgY0AMIGJAoGBAM4vGbwXt3fek6lfWg0XTzQaDJj0ItlZ1MRo
|
488 |
-
RvC0NcWFAyDGr0WlIVFFQesWWDYyb+JQYmT5/VGcqiTZ9J2DKocKIdMSODRsjQBu
|
489 |
-
WqDZQu4aIZX5UkxVWsUPOE9G+m34LjXWHXzr4vCwdYDIqROsvojvOm6rXyo4YgKw
|
490 |
-
Env+j6YDAgMBAAGjZjBkMBEGCWCGSAGG+EIBAQQEAwIABzAPBgNVHRMBAf8EBTAD
|
491 |
-
AQH/MB8GA1UdIwQYMBaAFEp4MlIR21kWNl7fwRQ2QGpHfEyhMB0GA1UdDgQWBBRK
|
492 |
-
eDJSEdtZFjZe38EUNkBqR3xMoTANBgkqhkiG9w0BAQQFAAOBgQB1W6ibAxHm6VZM
|
493 |
-
zfmpTMANmvPMZWnmJXbMWbfWVMMdzZmsGd20hdXgPfxiIKeES1hl8eL5lSE/9dR+
|
494 |
-
WB5Hh1Q+WKG1tfgq73HnvMP2sUlG4tega+VWeponmHxGYhTnyfxuAxJ5gDgdSIKN
|
495 |
-
/Bf+KpYrtWKmpj29f5JZzVoqgrI3eQ==
|
496 |
-
-----END CERTIFICATE-----
|
497 |
-
|
498 |
-
Equifax Secure eBusiness CA 2
|
499 |
-
=============================
|
500 |
-
|
501 |
-
-----BEGIN CERTIFICATE-----
|
502 |
-
MIIDIDCCAomgAwIBAgIEN3DPtTANBgkqhkiG9w0BAQUFADBOMQswCQYDVQQGEwJV
|
503 |
-
UzEXMBUGA1UEChMORXF1aWZheCBTZWN1cmUxJjAkBgNVBAsTHUVxdWlmYXggU2Vj
|
504 |
-
dXJlIGVCdXNpbmVzcyBDQS0yMB4XDTk5MDYyMzEyMTQ0NVoXDTE5MDYyMzEyMTQ0
|
505 |
-
NVowTjELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDkVxdWlmYXggU2VjdXJlMSYwJAYD
|
506 |
-
VQQLEx1FcXVpZmF4IFNlY3VyZSBlQnVzaW5lc3MgQ0EtMjCBnzANBgkqhkiG9w0B
|
507 |
-
AQEFAAOBjQAwgYkCgYEA5Dk5kx5SBhsoNviyoynF7Y6yEb3+6+e0dMKP/wXn2Z0G
|
508 |
-
vxLIPw7y1tEkshHe0XMJitSxLJgJDR5QRrKDpkWNYmi7hRsgcDKqQM2mll/EcTc/
|
509 |
-
BPO3QSQ5BxoeLmFYoBIL5aXfxavqN3HMHMg3OrmXUqesxWoklE6ce8/AatbfIb0C
|
510 |
-
AwEAAaOCAQkwggEFMHAGA1UdHwRpMGcwZaBjoGGkXzBdMQswCQYDVQQGEwJVUzEX
|
511 |
-
MBUGA1UEChMORXF1aWZheCBTZWN1cmUxJjAkBgNVBAsTHUVxdWlmYXggU2VjdXJl
|
512 |
-
IGVCdXNpbmVzcyBDQS0yMQ0wCwYDVQQDEwRDUkwxMBoGA1UdEAQTMBGBDzIwMTkw
|
513 |
-
NjIzMTIxNDQ1WjALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAUUJ4L6q9euSBIplBq
|
514 |
-
y/3YIHqngnYwHQYDVR0OBBYEFFCeC+qvXrkgSKZQasv92CB6p4J2MAwGA1UdEwQF
|
515 |
-
MAMBAf8wGgYJKoZIhvZ9B0EABA0wCxsFVjMuMGMDAgbAMA0GCSqGSIb3DQEBBQUA
|
516 |
-
A4GBAAyGgq3oThr1jokn4jVYPSm0B482UJW/bsGe68SQsoWou7dC4A8HOd/7npCy
|
517 |
-
0cE+U58DRLB+S/Rv5Hwf5+Kx5Lia78O9zt4LMjTZ3ijtM2vE1Nc9ElirfQkty3D1
|
518 |
-
E4qUoSek1nDFbZS1yX2doNLGCEnZZpum0/QL3MUmV+GRMOrN
|
519 |
-
-----END CERTIFICATE-----
|
520 |
-
|
521 |
-
Thawte Time Stamping CA
|
522 |
-
=======================
|
523 |
-
|
524 |
-
-----BEGIN CERTIFICATE-----
|
525 |
-
MIICoTCCAgqgAwIBAgIBADANBgkqhkiG9w0BAQQFADCBizELMAkGA1UEBhMCWkEx
|
526 |
-
FTATBgNVBAgTDFdlc3Rlcm4gQ2FwZTEUMBIGA1UEBxMLRHVyYmFudmlsbGUxDzAN
|
527 |
-
BgNVBAoTBlRoYXd0ZTEdMBsGA1UECxMUVGhhd3RlIENlcnRpZmljYXRpb24xHzAd
|
528 |
-
BgNVBAMTFlRoYXd0ZSBUaW1lc3RhbXBpbmcgQ0EwHhcNOTcwMTAxMDAwMDAwWhcN
|
529 |
-
MjAxMjMxMjM1OTU5WjCBizELMAkGA1UEBhMCWkExFTATBgNVBAgTDFdlc3Rlcm4g
|
530 |
-
Q2FwZTEUMBIGA1UEBxMLRHVyYmFudmlsbGUxDzANBgNVBAoTBlRoYXd0ZTEdMBsG
|
531 |
-
A1UECxMUVGhhd3RlIENlcnRpZmljYXRpb24xHzAdBgNVBAMTFlRoYXd0ZSBUaW1l
|
532 |
-
c3RhbXBpbmcgQ0EwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBANYrWHhhRYZT
|
533 |
-
6jR7UZztsOYuGA7+4F+oJ9O0yeB8WU4WDnNUYMF/9p8u6TqFJBU820cEY8OexJQa
|
534 |
-
Wt9MevPZQx08EHp5JduQ/vBR5zDWQQD9nyjfeb6Uu522FOMjhdepQeBMpHmwKxqL
|
535 |
-
8vg7ij5FrHGSALSQQZj7X+36ty6K+Ig3AgMBAAGjEzARMA8GA1UdEwEB/wQFMAMB
|
536 |
-
Af8wDQYJKoZIhvcNAQEEBQADgYEAZ9viwuaHPUCDhjc1fR/OmsMMZiCouqoEiYbC
|
537 |
-
9RAIDb/LogWK0E02PvTX72nGXuSwlG9KuefeW4i2e9vjJ+V2w/A1wcu1J5szedyQ
|
538 |
-
pgCed/r8zSeUQhac0xxo7L9c3eWpexAKMnRUEzGLhQOEkbdYATAUOK8oyvyxUBkZ
|
539 |
-
CayJSdM=
|
540 |
-
-----END CERTIFICATE-----
|
541 |
-
|
542 |
-
thawte Primary Root CA
|
543 |
-
======================
|
544 |
-
|
545 |
-
-----BEGIN CERTIFICATE-----
|
546 |
-
MIIEIDCCAwigAwIBAgIQNE7VVyDV7exJ9C/ON9srbTANBgkqhkiG9w0BAQUFADCB
|
547 |
-
qTELMAkGA1UEBhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5jLjEoMCYGA1UECxMf
|
548 |
-
Q2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjE4MDYGA1UECxMvKGMpIDIw
|
549 |
-
MDYgdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxHzAdBgNV
|
550 |
-
BAMTFnRoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EwHhcNMDYxMTE3MDAwMDAwWhcNMzYw
|
551 |
-
NzE2MjM1OTU5WjCBqTELMAkGA1UEBhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5j
|
552 |
-
LjEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjE4MDYG
|
553 |
-
A1UECxMvKGMpIDIwMDYgdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNl
|
554 |
-
IG9ubHkxHzAdBgNVBAMTFnRoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EwggEiMA0GCSqG
|
555 |
-
SIb3DQEBAQUAA4IBDwAwggEKAoIBAQCsoPD7gFnUnMekz52hWXMJEEUMDSxuaPFs
|
556 |
-
W0hoSVk3/AszGcJ3f8wQLZU0HObrTQmnHNK4yZc2AreJ1CRfBsDMRJSUjQJib+ta
|
557 |
-
3RGNKJpchJAQeg29dGYvajig4tVUROsdB58Hum/u6f1OCyn1PoSgAfGcq/gcfomk
|
558 |
-
6KHYcWUNo1F77rzSImANuVud37r8UVsLr5iy6S7pBOhih94ryNdOwUxkHt3Ph1i6
|
559 |
-
Sk/KaAcdHJ1KxtUvkcx8cXIcxcBn6zL9yZJclNqFwJu/U30rCfSMnZEfl2pSy94J
|
560 |
-
NqR32HuHUETVPm4pafs5SSYeCaWAe0At6+gnhcn+Yf1+5nyXHdWdAgMBAAGjQjBA
|
561 |
-
MA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBR7W0XP
|
562 |
-
r87Lev0xkhpqtvNG61dIUDANBgkqhkiG9w0BAQUFAAOCAQEAeRHAS7ORtvzw6WfU
|
563 |
-
DW5FvlXok9LOAz/t2iWwHVfLHjp2oEzsUHboZHIMpKnxuIvW1oeEuzLlQRHAd9mz
|
564 |
-
YJ3rG9XRbkREqaYB7FViHXe4XI5ISXycO1cRrK1zN44veFyQaEfZYGDm/Ac9IiAX
|
565 |
-
xPcW6cTYcvnIc3zfFi8VqT79aie2oetaupgf1eNNZAqdE8hhuvU5HIe6uL17In/2
|
566 |
-
/qxAeeWsEG89jxt5dovEN7MhGITlNgDrYyCZuen+MwS7QcjBAvlEYyCegc5C09Y/
|
567 |
-
LHbTY5xZ3Y+m4Q6gLkH3LpVHz7z9M/P2C2F+fpErgUfCJzDupxBdN49cOSvkBPB7
|
568 |
-
jVaMaA==
|
569 |
-
-----END CERTIFICATE-----
|
570 |
-
|
571 |
-
VeriSign Class 3 Public Primary Certification Authority - G5
|
572 |
-
============================================================
|
573 |
-
|
574 |
-
-----BEGIN CERTIFICATE-----
|
575 |
-
MIIE0zCCA7ugAwIBAgIQGNrRniZ96LtKIVjNzGs7SjANBgkqhkiG9w0BAQUFADCB
|
576 |
-
yjELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQL
|
577 |
-
ExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNiBWZXJp
|
578 |
-
U2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxW
|
579 |
-
ZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0
|
580 |
-
aG9yaXR5IC0gRzUwHhcNMDYxMTA4MDAwMDAwWhcNMzYwNzE2MjM1OTU5WjCByjEL
|
581 |
-
MAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZW
|
582 |
-
ZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNiBWZXJpU2ln
|
583 |
-
biwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJp
|
584 |
-
U2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9y
|
585 |
-
aXR5IC0gRzUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCvJAgIKXo1
|
586 |
-
nmAMqudLO07cfLw8RRy7K+D+KQL5VwijZIUVJ/XxrcgxiV0i6CqqpkKzj/i5Vbex
|
587 |
-
t0uz/o9+B1fs70PbZmIVYc9gDaTY3vjgw2IIPVQT60nKWVSFJuUrjxuf6/WhkcIz
|
588 |
-
SdhDY2pSS9KP6HBRTdGJaXvHcPaz3BJ023tdS1bTlr8Vd6Gw9KIl8q8ckmcY5fQG
|
589 |
-
BO+QueQA5N06tRn/Arr0PO7gi+s3i+z016zy9vA9r911kTMZHRxAy3QkGSGT2RT+
|
590 |
-
rCpSx4/VBEnkjWNHiDxpg8v+R70rfk/Fla4OndTRQ8Bnc+MUCH7lP59zuDMKz10/
|
591 |
-
NIeWiu5T6CUVAgMBAAGjgbIwga8wDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8E
|
592 |
-
BAMCAQYwbQYIKwYBBQUHAQwEYTBfoV2gWzBZMFcwVRYJaW1hZ2UvZ2lmMCEwHzAH
|
593 |
-
BgUrDgMCGgQUj+XTGoasjY5rw8+AatRIGCx7GS4wJRYjaHR0cDovL2xvZ28udmVy
|
594 |
-
aXNpZ24uY29tL3ZzbG9nby5naWYwHQYDVR0OBBYEFH/TZafC3ey78DAJ80M5+gKv
|
595 |
-
MzEzMA0GCSqGSIb3DQEBBQUAA4IBAQCTJEowX2LP2BqYLz3q3JktvXf2pXkiOOzE
|
596 |
-
p6B4Eq1iDkVwZMXnl2YtmAl+X6/WzChl8gGqCBpH3vn5fJJaCGkgDdk+bW48DW7Y
|
597 |
-
5gaRQBi5+MHt39tBquCWIMnNZBU4gcmU7qKEKQsTb47bDN0lAtukixlE0kF6BWlK
|
598 |
-
WE9gyn6CagsCqiUXObXbf+eEZSqVir2G3l6BFoMtEMze/aiCKm0oHw0LxOXnGiYZ
|
599 |
-
4fQRbxC1lfznQgUy286dUV4otp6F01vvpX1FQHKOtw5rDgb7MzVIcbidJ4vEZV8N
|
600 |
-
hnacRHr2lVz2XTIIM6RUthg/aFzyQkqFOFSDX9HoLPKsEdao7WNq
|
601 |
-
-----END CERTIFICATE-----
|
602 |
-
|
603 |
-
Entrust.net Secure Server Certification Authority
|
604 |
-
=================================================
|
605 |
-
|
606 |
-
-----BEGIN CERTIFICATE-----
|
607 |
-
MIIE2DCCBEGgAwIBAgIEN0rSQzANBgkqhkiG9w0BAQUFADCBwzELMAkGA1UEBhMC
|
608 |
-
VVMxFDASBgNVBAoTC0VudHJ1c3QubmV0MTswOQYDVQQLEzJ3d3cuZW50cnVzdC5u
|
609 |
-
ZXQvQ1BTIGluY29ycC4gYnkgcmVmLiAobGltaXRzIGxpYWIuKTElMCMGA1UECxMc
|
610 |
-
KGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRlZDE6MDgGA1UEAxMxRW50cnVzdC5u
|
611 |
-
ZXQgU2VjdXJlIFNlcnZlciBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw05OTA1
|
612 |
-
MjUxNjA5NDBaFw0xOTA1MjUxNjM5NDBaMIHDMQswCQYDVQQGEwJVUzEUMBIGA1UE
|
613 |
-
ChMLRW50cnVzdC5uZXQxOzA5BgNVBAsTMnd3dy5lbnRydXN0Lm5ldC9DUFMgaW5j
|
614 |
-
b3JwLiBieSByZWYuIChsaW1pdHMgbGlhYi4pMSUwIwYDVQQLExwoYykgMTk5OSBF
|
615 |
-
bnRydXN0Lm5ldCBMaW1pdGVkMTowOAYDVQQDEzFFbnRydXN0Lm5ldCBTZWN1cmUg
|
616 |
-
U2VydmVyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGdMA0GCSqGSIb3DQEBAQUA
|
617 |
-
A4GLADCBhwKBgQDNKIM0VBuJ8w+vN5Ex/68xYMmo6LIQaO2f55M28Qpku0f1BBc/
|
618 |
-
I0dNxScZgSYMVHINiC3ZH5oSn7yzcdOAGT9HZnuMNSjSuQrfJNqc1lB5gXpa0zf3
|
619 |
-
wkrYKZImZNHkmGw6AIr1NJtl+O3jEP/9uElY3KDegjlrgbEWGWG5VLbmQwIBA6OC
|
620 |
-
AdcwggHTMBEGCWCGSAGG+EIBAQQEAwIABzCCARkGA1UdHwSCARAwggEMMIHeoIHb
|
621 |
-
oIHYpIHVMIHSMQswCQYDVQQGEwJVUzEUMBIGA1UEChMLRW50cnVzdC5uZXQxOzA5
|
622 |
-
BgNVBAsTMnd3dy5lbnRydXN0Lm5ldC9DUFMgaW5jb3JwLiBieSByZWYuIChsaW1p
|
623 |
-
dHMgbGlhYi4pMSUwIwYDVQQLExwoYykgMTk5OSBFbnRydXN0Lm5ldCBMaW1pdGVk
|
624 |
-
MTowOAYDVQQDEzFFbnRydXN0Lm5ldCBTZWN1cmUgU2VydmVyIENlcnRpZmljYXRp
|
625 |
-
b24gQXV0aG9yaXR5MQ0wCwYDVQQDEwRDUkwxMCmgJ6AlhiNodHRwOi8vd3d3LmVu
|
626 |
-
dHJ1c3QubmV0L0NSTC9uZXQxLmNybDArBgNVHRAEJDAigA8xOTk5MDUyNTE2MDk0
|
627 |
-
MFqBDzIwMTkwNTI1MTYwOTQwWjALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAU8Bdi
|
628 |
-
E1U9s/8KAGv7UISX8+1i0BowHQYDVR0OBBYEFPAXYhNVPbP/CgBr+1CEl/PtYtAa
|
629 |
-
MAwGA1UdEwQFMAMBAf8wGQYJKoZIhvZ9B0EABAwwChsEVjQuMAMCBJAwDQYJKoZI
|
630 |
-
hvcNAQEFBQADgYEAkNwwAvpkdMKnCqV8IY00F6j7Rw7/JXyNEwr75Ji174z4xRAN
|
631 |
-
95K+8cPV1ZVqBLssziY2ZcgxxufuP+NXdYR6Ee9GTxj005i7qIcyunL2POI9n9cd
|
632 |
-
2cNgQ4xYDiKWL2KjLB+6rQXvqzJ4h6BUcxm1XAX5Uj5tLUUL9wqT6u0G+bI=
|
633 |
-
-----END CERTIFICATE-----
|
634 |
-
|
635 |
-
Go Daddy Certification Authority Root Certificate Bundle
|
636 |
-
========================================================
|
637 |
-
|
638 |
-
-----BEGIN CERTIFICATE-----
|
639 |
-
MIIE3jCCA8agAwIBAgICAwEwDQYJKoZIhvcNAQEFBQAwYzELMAkGA1UEBhMCVVMx
|
640 |
-
ITAfBgNVBAoTGFRoZSBHbyBEYWRkeSBHcm91cCwgSW5jLjExMC8GA1UECxMoR28g
|
641 |
-
RGFkZHkgQ2xhc3MgMiBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wNjExMTYw
|
642 |
-
MTU0MzdaFw0yNjExMTYwMTU0MzdaMIHKMQswCQYDVQQGEwJVUzEQMA4GA1UECBMH
|
643 |
-
QXJpem9uYTETMBEGA1UEBxMKU2NvdHRzZGFsZTEaMBgGA1UEChMRR29EYWRkeS5j
|
644 |
-
b20sIEluYy4xMzAxBgNVBAsTKmh0dHA6Ly9jZXJ0aWZpY2F0ZXMuZ29kYWRkeS5j
|
645 |
-
b20vcmVwb3NpdG9yeTEwMC4GA1UEAxMnR28gRGFkZHkgU2VjdXJlIENlcnRpZmlj
|
646 |
-
YXRpb24gQXV0aG9yaXR5MREwDwYDVQQFEwgwNzk2OTI4NzCCASIwDQYJKoZIhvcN
|
647 |
-
AQEBBQADggEPADCCAQoCggEBAMQt1RWMnCZM7DI161+4WQFapmGBWTtwY6vj3D3H
|
648 |
-
KrjJM9N55DrtPDAjhI6zMBS2sofDPZVUBJ7fmd0LJR4h3mUpfjWoqVTr9vcyOdQm
|
649 |
-
VZWt7/v+WIbXnvQAjYwqDL1CBM6nPwT27oDyqu9SoWlm2r4arV3aLGbqGmu75RpR
|
650 |
-
SgAvSMeYddi5Kcju+GZtCpyz8/x4fKL4o/K1w/O5epHBp+YlLpyo7RJlbmr2EkRT
|
651 |
-
cDCVw5wrWCs9CHRK8r5RsL+H0EwnWGu1NcWdrxcx+AuP7q2BNgWJCJjPOq8lh8BJ
|
652 |
-
6qf9Z/dFjpfMFDniNoW1fho3/Rb2cRGadDAW/hOUoz+EDU8CAwEAAaOCATIwggEu
|
653 |
-
MB0GA1UdDgQWBBT9rGEyk2xF1uLuhV+auud2mWjM5zAfBgNVHSMEGDAWgBTSxLDS
|
654 |
-
kdRMEXGzYcs9of7dqGrU4zASBgNVHRMBAf8ECDAGAQH/AgEAMDMGCCsGAQUFBwEB
|
655 |
-
BCcwJTAjBggrBgEFBQcwAYYXaHR0cDovL29jc3AuZ29kYWRkeS5jb20wRgYDVR0f
|
656 |
-
BD8wPTA7oDmgN4Y1aHR0cDovL2NlcnRpZmljYXRlcy5nb2RhZGR5LmNvbS9yZXBv
|
657 |
-
c2l0b3J5L2dkcm9vdC5jcmwwSwYDVR0gBEQwQjBABgRVHSAAMDgwNgYIKwYBBQUH
|
658 |
-
AgEWKmh0dHA6Ly9jZXJ0aWZpY2F0ZXMuZ29kYWRkeS5jb20vcmVwb3NpdG9yeTAO
|
659 |
-
BgNVHQ8BAf8EBAMCAQYwDQYJKoZIhvcNAQEFBQADggEBANKGwOy9+aG2Z+5mC6IG
|
660 |
-
OgRQjhVyrEp0lVPLN8tESe8HkGsz2ZbwlFalEzAFPIUyIXvJxwqoJKSQ3kbTJSMU
|
661 |
-
A2fCENZvD117esyfxVgqwcSeIaha86ykRvOe5GPLL5CkKSkB2XIsKd83ASe8T+5o
|
662 |
-
0yGPwLPk9Qnt0hCqU7S+8MxZC9Y7lhyVJEnfzuz9p0iRFEUOOjZv2kWzRaJBydTX
|
663 |
-
RE4+uXR21aITVSzGh6O1mawGhId/dQb8vxRMDsxuxN89txJx9OjxUUAiKEngHUuH
|
664 |
-
qDTMBqLdElrRhjZkAzVvb3du6/KFUJheqwNTrZEjYx8WnM25sgVjOuH0aBsXBTWV
|
665 |
-
U+4=
|
666 |
-
-----END CERTIFICATE-----
|
667 |
-
-----BEGIN CERTIFICATE-----
|
668 |
-
MIIE+zCCBGSgAwIBAgICAQ0wDQYJKoZIhvcNAQEFBQAwgbsxJDAiBgNVBAcTG1Zh
|
669 |
-
bGlDZXJ0IFZhbGlkYXRpb24gTmV0d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIElu
|
670 |
-
Yy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENsYXNzIDIgUG9saWN5IFZhbGlkYXRpb24g
|
671 |
-
QXV0aG9yaXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZhbGljZXJ0LmNvbS8xIDAe
|
672 |
-
BgkqhkiG9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMB4XDTA0MDYyOTE3MDYyMFoX
|
673 |
-
DTI0MDYyOTE3MDYyMFowYzELMAkGA1UEBhMCVVMxITAfBgNVBAoTGFRoZSBHbyBE
|
674 |
-
YWRkeSBHcm91cCwgSW5jLjExMC8GA1UECxMoR28gRGFkZHkgQ2xhc3MgMiBDZXJ0
|
675 |
-
aWZpY2F0aW9uIEF1dGhvcml0eTCCASAwDQYJKoZIhvcNAQEBBQADggENADCCAQgC
|
676 |
-
ggEBAN6d1+pXGEmhW+vXX0iG6r7d/+TvZxz0ZWizV3GgXne77ZtJ6XCAPVYYYwhv
|
677 |
-
2vLM0D9/AlQiVBDYsoHUwHU9S3/Hd8M+eKsaA7Ugay9qK7HFiH7Eux6wwdhFJ2+q
|
678 |
-
N1j3hybX2C32qRe3H3I2TqYXP2WYktsqbl2i/ojgC95/5Y0V4evLOtXiEqITLdiO
|
679 |
-
r18SPaAIBQi2XKVlOARFmR6jYGB0xUGlcmIbYsUfb18aQr4CUWWoriMYavx4A6lN
|
680 |
-
f4DD+qta/KFApMoZFv6yyO9ecw3ud72a9nmYvLEHZ6IVDd2gWMZEewo+YihfukEH
|
681 |
-
U1jPEX44dMX4/7VpkI+EdOqXG68CAQOjggHhMIIB3TAdBgNVHQ4EFgQU0sSw0pHU
|
682 |
-
TBFxs2HLPaH+3ahq1OMwgdIGA1UdIwSByjCBx6GBwaSBvjCBuzEkMCIGA1UEBxMb
|
683 |
-
VmFsaUNlcnQgVmFsaWRhdGlvbiBOZXR3b3JrMRcwFQYDVQQKEw5WYWxpQ2VydCwg
|
684 |
-
SW5jLjE1MDMGA1UECxMsVmFsaUNlcnQgQ2xhc3MgMiBQb2xpY3kgVmFsaWRhdGlv
|
685 |
-
biBBdXRob3JpdHkxITAfBgNVBAMTGGh0dHA6Ly93d3cudmFsaWNlcnQuY29tLzEg
|
686 |
-
MB4GCSqGSIb3DQEJARYRaW5mb0B2YWxpY2VydC5jb22CAQEwDwYDVR0TAQH/BAUw
|
687 |
-
AwEB/zAzBggrBgEFBQcBAQQnMCUwIwYIKwYBBQUHMAGGF2h0dHA6Ly9vY3NwLmdv
|
688 |
-
ZGFkZHkuY29tMEQGA1UdHwQ9MDswOaA3oDWGM2h0dHA6Ly9jZXJ0aWZpY2F0ZXMu
|
689 |
-
Z29kYWRkeS5jb20vcmVwb3NpdG9yeS9yb290LmNybDBLBgNVHSAERDBCMEAGBFUd
|
690 |
-
IAAwODA2BggrBgEFBQcCARYqaHR0cDovL2NlcnRpZmljYXRlcy5nb2RhZGR5LmNv
|
691 |
-
bS9yZXBvc2l0b3J5MA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQUFAAOBgQC1
|
692 |
-
QPmnHfbq/qQaQlpE9xXUhUaJwL6e4+PrxeNYiY+Sn1eocSxI0YGyeR+sBjUZsE4O
|
693 |
-
WBsUs5iB0QQeyAfJg594RAoYC5jcdnplDQ1tgMQLARzLrUc+cb53S8wGd9D0Vmsf
|
694 |
-
SxOaFIqII6hR8INMqzW/Rn453HWkrugp++85j09VZw==
|
695 |
-
-----END CERTIFICATE-----
|
696 |
-
-----BEGIN CERTIFICATE-----
|
697 |
-
MIIC5zCCAlACAQEwDQYJKoZIhvcNAQEFBQAwgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0
|
698 |
-
IFZhbGlkYXRpb24gTmV0d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAz
|
699 |
-
BgNVBAsTLFZhbGlDZXJ0IENsYXNzIDIgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9y
|
700 |
-
aXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZhbGljZXJ0LmNvbS8xIDAeBgkqhkiG
|
701 |
-
9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMB4XDTk5MDYyNjAwMTk1NFoXDTE5MDYy
|
702 |
-
NjAwMTk1NFowgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRpb24gTmV0d29y
|
703 |
-
azEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENs
|
704 |
-
YXNzIDIgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRw
|
705 |
-
Oi8vd3d3LnZhbGljZXJ0LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNl
|
706 |
-
cnQuY29tMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDOOnHK5avIWZJV16vY
|
707 |
-
dA757tn2VUdZZUcOBVXc65g2PFxTXdMwzzjsvUGJ7SVCCSRrCl6zfN1SLUzm1NZ9
|
708 |
-
WlmpZdRJEy0kTRxQb7XBhVQ7/nHk01xC+YDgkRoKWzk2Z/M/VXwbP7RfZHM047QS
|
709 |
-
v4dk+NoS/zcnwbNDu+97bi5p9wIDAQABMA0GCSqGSIb3DQEBBQUAA4GBADt/UG9v
|
710 |
-
UJSZSWI4OB9L+KXIPqeCgfYrx+jFzug6EILLGACOTb2oWH+heQC1u+mNr0HZDzTu
|
711 |
-
IYEZoDJJKPTEjlbVUjP9UNV+mWwD5MlM/Mtsq2azSiGM5bUMMj4QssxsodyamEwC
|
712 |
-
W/POuZ6lcg5Ktz885hZo+L7tdEy8W9ViH0Pd
|
713 |
-
-----END CERTIFICATE-----
|
714 |
-
|
715 |
-
GeoTrust Global CA
|
716 |
-
==================
|
717 |
-
|
718 |
-
-----BEGIN CERTIFICATE-----
|
719 |
-
MIIDfTCCAuagAwIBAgIDErvmMA0GCSqGSIb3DQEBBQUAME4xCzAJBgNVBAYTAlVT
|
720 |
-
MRAwDgYDVQQKEwdFcXVpZmF4MS0wKwYDVQQLEyRFcXVpZmF4IFNlY3VyZSBDZXJ0
|
721 |
-
aWZpY2F0ZSBBdXRob3JpdHkwHhcNMDIwNTIxMDQwMDAwWhcNMTgwODIxMDQwMDAw
|
722 |
-
WjBCMQswCQYDVQQGEwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEbMBkGA1UE
|
723 |
-
AxMSR2VvVHJ1c3QgR2xvYmFsIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB
|
724 |
-
CgKCAQEA2swYYzD99BcjGlZ+W988bDjkcbd4kdS8odhM+KhDtgPpTSEHCIjaWC9m
|
725 |
-
OSm9BXiLnTjoBbdqfnGk5sRgprDvgOSJKA+eJdbtg/OtppHHmMlCGDUUna2YRpIu
|
726 |
-
T8rxh0PBFpVXLVDviS2Aelet8u5fa9IAjbkU+BQVNdnARqN7csiRv8lVK83Qlz6c
|
727 |
-
JmTM386DGXHKTubU1XupGc1V3sjs0l44U+VcT4wt/lAjNvxm5suOpDkZALeVAjmR
|
728 |
-
Cw7+OC7RHQWa9k0+bw8HHa8sHo9gOeL6NlMTOdReJivbPagUvTLrGAMoUgRx5asz
|
729 |
-
PeE4uwc2hGKceeoWMPRfwCvocWvk+QIDAQABo4HwMIHtMB8GA1UdIwQYMBaAFEjm
|
730 |
-
aPkr0rKV10fYIyAQTzOYkJ/UMB0GA1UdDgQWBBTAephojYn7qwVkDBF9qn1luMrM
|
731 |
-
TjAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjA6BgNVHR8EMzAxMC+g
|
732 |
-
LaArhilodHRwOi8vY3JsLmdlb3RydXN0LmNvbS9jcmxzL3NlY3VyZWNhLmNybDBO
|
733 |
-
BgNVHSAERzBFMEMGBFUdIAAwOzA5BggrBgEFBQcCARYtaHR0cHM6Ly93d3cuZ2Vv
|
734 |
-
dHJ1c3QuY29tL3Jlc291cmNlcy9yZXBvc2l0b3J5MA0GCSqGSIb3DQEBBQUAA4GB
|
735 |
-
AHbhEm5OSxYShjAGsoEIz/AIx8dxfmbuwu3UOx//8PDITtZDOLC5MH0Y0FWDomrL
|
736 |
-
NhGc6Ehmo21/uBPUR/6LWlxz/K7ZGzIZOKuXNBSqltLroxwUCEm2u+WR74M26x1W
|
737 |
-
b8ravHNjkOR/ez4iyz0H7V84dJzjA1BOoa+Y7mHyhD8S
|
738 |
-
-----END CERTIFICATE-----
|
739 |
-
|
740 |
-
GlobalSign Root CA
|
741 |
-
==================
|
742 |
-
-----BEGIN CERTIFICATE-----
|
743 |
-
MIIDdTCCAl2gAwIBAgILBAAAAAABFUtaw5QwDQYJKoZIhvcNAQEFBQAwVzELMAkGA1UEBhMCQkUx
|
744 |
-
GTAXBgNVBAoTEEdsb2JhbFNpZ24gbnYtc2ExEDAOBgNVBAsTB1Jvb3QgQ0ExGzAZBgNVBAMTEkds
|
745 |
-
b2JhbFNpZ24gUm9vdCBDQTAeFw05ODA5MDExMjAwMDBaFw0yODAxMjgxMjAwMDBaMFcxCzAJBgNV
|
746 |
-
BAYTAkJFMRkwFwYDVQQKExBHbG9iYWxTaWduIG52LXNhMRAwDgYDVQQLEwdSb290IENBMRswGQYD
|
747 |
-
VQQDExJHbG9iYWxTaWduIFJvb3QgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDa
|
748 |
-
DuaZjc6j40+Kfvvxi4Mla+pIH/EqsLmVEQS98GPR4mdmzxzdzxtIK+6NiY6arymAZavpxy0Sy6sc
|
749 |
-
THAHoT0KMM0VjU/43dSMUBUc71DuxC73/OlS8pF94G3VNTCOXkNz8kHp1Wrjsok6Vjk4bwY8iGlb
|
750 |
-
Kk3Fp1S4bInMm/k8yuX9ifUSPJJ4ltbcdG6TRGHRjcdGsnUOhugZitVtbNV4FpWi6cgKOOvyJBNP
|
751 |
-
c1STE4U6G7weNLWLBYy5d4ux2x8gkasJU26Qzns3dLlwR5EiUWMWea6xrkEmCMgZK9FGqkjWZCrX
|
752 |
-
gzT/LCrBbBlDSgeF59N89iFo7+ryUp9/k5DPAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNV
|
753 |
-
HRMBAf8EBTADAQH/MB0GA1UdDgQWBBRge2YaRQ2XyolQL30EzTSo//z9SzANBgkqhkiG9w0BAQUF
|
754 |
-
AAOCAQEA1nPnfE920I2/7LqivjTFKDK1fPxsnCwrvQmeU79rXqoRSLblCKOzyj1hTdNGCbM+w6Dj
|
755 |
-
Y1Ub8rrvrTnhQ7k4o+YviiY776BQVvnGCv04zcQLcFGUl5gE38NflNUVyRRBnMRddWQVDf9VMOyG
|
756 |
-
j/8N7yy5Y0b2qvzfvGn9LhJIZJrglfCm7ymPAbEVtQwdpf5pLGkkeB6zpxxxYu7KyJesF12KwvhH
|
757 |
-
hm4qxFYxldBniYUr+WymXUadDKqC5JlR3XC321Y9YeRq4VzW9v493kHMB65jUr9TU/Qr6cf9tveC
|
758 |
-
X4XSQRjbgbMEHMUfpIBvFSDJ3gyICh3WZlXi/EjJKSZp4A==
|
759 |
-
-----END CERTIFICATE-----
|
760 |
-
|
761 |
-
GlobalSign Root CA - R2
|
762 |
-
=======================
|
763 |
-
-----BEGIN CERTIFICATE-----
|
764 |
-
MIIDujCCAqKgAwIBAgILBAAAAAABD4Ym5g0wDQYJKoZIhvcNAQEFBQAwTDEgMB4GA1UECxMXR2xv
|
765 |
-
YmFsU2lnbiBSb290IENBIC0gUjIxEzARBgNVBAoTCkdsb2JhbFNpZ24xEzARBgNVBAMTCkdsb2Jh
|
766 |
-
bFNpZ24wHhcNMDYxMjE1MDgwMDAwWhcNMjExMjE1MDgwMDAwWjBMMSAwHgYDVQQLExdHbG9iYWxT
|
767 |
-
aWduIFJvb3QgQ0EgLSBSMjETMBEGA1UEChMKR2xvYmFsU2lnbjETMBEGA1UEAxMKR2xvYmFsU2ln
|
768 |
-
bjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKbPJA6+Lm8omUVCxKs+IVSbC9N/hHD6
|
769 |
-
ErPLv4dfxn+G07IwXNb9rfF73OX4YJYJkhD10FPe+3t+c4isUoh7SqbKSaZeqKeMWhG8eoLrvozp
|
770 |
-
s6yWJQeXSpkqBy+0Hne/ig+1AnwblrjFuTosvNYSuetZfeLQBoZfXklqtTleiDTsvHgMCJiEbKjN
|
771 |
-
S7SgfQx5TfC4LcshytVsW33hoCmEofnTlEnLJGKRILzdC9XZzPnqJworc5HGnRusyMvo4KD0L5CL
|
772 |
-
TfuwNhv2GXqF4G3yYROIXJ/gkwpRl4pazq+r1feqCapgvdzZX99yqWATXgAByUr6P6TqBwMhAo6C
|
773 |
-
ygPCm48CAwEAAaOBnDCBmTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4E
|
774 |
-
FgQUm+IHV2ccHsBqBt5ZtJot39wZhi4wNgYDVR0fBC8wLTAroCmgJ4YlaHR0cDovL2NybC5nbG9i
|
775 |
-
YWxzaWduLm5ldC9yb290LXIyLmNybDAfBgNVHSMEGDAWgBSb4gdXZxwewGoG3lm0mi3f3BmGLjAN
|
776 |
-
BgkqhkiG9w0BAQUFAAOCAQEAmYFThxxol4aR7OBKuEQLq4GsJ0/WwbgcQ3izDJr86iw8bmEbTUsp
|
777 |
-
9Z8FHSbBuOmDAGJFtqkIk7mpM0sYmsL4h4hO291xNBrBVNpGP+DTKqttVCL1OmLNIG+6KYnX3ZHu
|
778 |
-
01yiPqFbQfXf5WRDLenVOavSot+3i9DAgBkcRcAtjOj4LaR0VknFBbVPFd5uRHg5h6h+u/N5GJG7
|
779 |
-
9G+dwfCMNYxdAfvDbbnvRG15RjF+Cv6pgsH/76tuIMRQyV+dTZsXjAzlAcmgQWpzU/qlULRuJQ/7
|
780 |
-
TBj0/VLZjmmx6BEP3ojY+x1J96relc8geMJgEtslQIxq/H5COEBkEveegeGTLg==
|
781 |
-
-----END CERTIFICATE-----
|
782 |
-
|
783 |
-
Verisign Class 3 Public Primary Certification Authority - G3
|
784 |
-
============================================================
|
785 |
-
-----BEGIN CERTIFICATE-----
|
786 |
-
MIIEGjCCAwICEQCbfgZJoz5iudXukEhxKe9XMA0GCSqGSIb3DQEBBQUAMIHKMQswCQYDVQQGEwJV
|
787 |
-
UzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5ldHdv
|
788 |
-
cmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNl
|
789 |
-
IG9ubHkxRTBDBgNVBAMTPFZlcmlTaWduIENsYXNzIDMgUHVibGljIFByaW1hcnkgQ2VydGlmaWNh
|
790 |
-
dGlvbiBBdXRob3JpdHkgLSBHMzAeFw05OTEwMDEwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMIHKMQsw
|
791 |
-
CQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRy
|
792 |
-
dXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhv
|
793 |
-
cml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWduIENsYXNzIDMgUHVibGljIFByaW1hcnkg
|
794 |
-
Q2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC
|
795 |
-
ggEBAMu6nFL8eB8aHm8bN3O9+MlrlBIwT/A2R/XQkQr1F8ilYcEWQE37imGQ5XYgwREGfassbqb1
|
796 |
-
EUGO+i2tKmFZpGcmTNDovFJbcCAEWNF6yaRpvIMXZK0Fi7zQWM6NjPXr8EJJC52XJ2cybuGukxUc
|
797 |
-
cLwgTS8Y3pKI6GyFVxEa6X7jJhFUokWWVYPKMIno3Nij7SqAP395ZVc+FSBmCC+Vk7+qRy+oRpfw
|
798 |
-
EuL+wgorUeZ25rdGt+INpsyow0xZVYnm6FNcHOqd8GIWC6fJXwzw3sJ2zq/3avL6QaaiMxTJ5Xpj
|
799 |
-
055iN9WFZZ4O5lMkdBteHRJTW8cs54NJOxWuimi5V5cCAwEAATANBgkqhkiG9w0BAQUFAAOCAQEA
|
800 |
-
ERSWwauSCPc/L8my/uRan2Te2yFPhpk0djZX3dAVL8WtfxUfN2JzPtTnX84XA9s1+ivbrmAJXx5f
|
801 |
-
j267Cz3qWhMeDGBvtcC1IyIuBwvLqXTLR7sdwdela8wv0kL9Sd2nic9TutoAWii/gt/4uhMdUIaC
|
802 |
-
/Y4wjylGsB49Ndo4YhYYSq3mtlFs3q9i6wHQHiT+eo8SGhJouPtmmRQURVyu565pF4ErWjfJXir0
|
803 |
-
xuKhXFSbplQAz/DxwceYMBo7Nhbbo27q/a2ywtrvAkcTisDxszGtTxzhT5yvDwyd93gN2PQ1VoDa
|
804 |
-
t20Xj50egWTh/sVFuq1ruQp6Tk9LhO5L8X3dEQ==
|
805 |
-
-----END CERTIFICATE-----
|
806 |
-
|
807 |
-
Entrust.net Premium 2048 Secure Server CA
|
808 |
-
=========================================
|
809 |
-
-----BEGIN CERTIFICATE-----
|
810 |
-
MIIEKjCCAxKgAwIBAgIEOGPe+DANBgkqhkiG9w0BAQUFADCBtDEUMBIGA1UEChMLRW50cnVzdC5u
|
811 |
-
ZXQxQDA+BgNVBAsUN3d3dy5lbnRydXN0Lm5ldC9DUFNfMjA0OCBpbmNvcnAuIGJ5IHJlZi4gKGxp
|
812 |
-
bWl0cyBsaWFiLikxJTAjBgNVBAsTHChjKSAxOTk5IEVudHJ1c3QubmV0IExpbWl0ZWQxMzAxBgNV
|
813 |
-
BAMTKkVudHJ1c3QubmV0IENlcnRpZmljYXRpb24gQXV0aG9yaXR5ICgyMDQ4KTAeFw05OTEyMjQx
|
814 |
-
NzUwNTFaFw0yOTA3MjQxNDE1MTJaMIG0MRQwEgYDVQQKEwtFbnRydXN0Lm5ldDFAMD4GA1UECxQ3
|
815 |
-
d3d3LmVudHJ1c3QubmV0L0NQU18yMDQ4IGluY29ycC4gYnkgcmVmLiAobGltaXRzIGxpYWIuKTEl
|
816 |
-
MCMGA1UECxMcKGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRlZDEzMDEGA1UEAxMqRW50cnVzdC5u
|
817 |
-
ZXQgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgKDIwNDgpMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A
|
818 |
-
MIIBCgKCAQEArU1LqRKGsuqjIAcVFmQqK0vRvwtKTY7tgHalZ7d4QMBzQshowNtTK91euHaYNZOL
|
819 |
-
Gp18EzoOH1u3Hs/lJBQesYGpjX24zGtLA/ECDNyrpUAkAH90lKGdCCmziAv1h3edVc3kw37XamSr
|
820 |
-
hRSGlVuXMlBvPci6Zgzj/L24ScF2iUkZ/cCovYmjZy/Gn7xxGWC4LeksyZB2ZnuU4q941mVTXTzW
|
821 |
-
nLLPKQP5L6RQstRIzgUyVYr9smRMDuSYB3Xbf9+5CFVghTAp+XtIpGmG4zU/HoZdenoVve8AjhUi
|
822 |
-
VBcAkCaTvA5JaJG/+EfTnZVCwQ5N328mz8MYIWJmQ3DW1cAH4QIDAQABo0IwQDAOBgNVHQ8BAf8E
|
823 |
-
BAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUVeSB0RGAvtiJuQijMfmhJAkWuXAwDQYJ
|
824 |
-
KoZIhvcNAQEFBQADggEBADubj1abMOdTmXx6eadNl9cZlZD7Bh/KM3xGY4+WZiT6QBshJ8rmcnPy
|
825 |
-
T/4xmf3IDExoU8aAghOY+rat2l098c5u9hURlIIM7j+VrxGrD9cv3h8Dj1csHsm7mhpElesYT6Yf
|
826 |
-
zX1XEC+bBAlahLVu2B064dae0Wx5XnkcFMXj0EyTO2U87d89vqbllRrDtRnDvV5bu/8j72gZyxKT
|
827 |
-
J1wDLW8w0B62GqzeWvfRqqgnpv55gcR5mTNXuhKwqeBCbJPKVt7+bYQLCIt+jerXmCHG8+c8eS9e
|
828 |
-
nNFMFY3h7CI3zJpDC5fcgJCNs2ebb0gIFVbPv/ErfF6adulZkMV8gzURZVE=
|
829 |
-
-----END CERTIFICATE-----
|
830 |
-
|
831 |
-
Baltimore CyberTrust Root
|
832 |
-
=========================
|
833 |
-
-----BEGIN CERTIFICATE-----
|
834 |
-
MIIDdzCCAl+gAwIBAgIEAgAAuTANBgkqhkiG9w0BAQUFADBaMQswCQYDVQQGEwJJRTESMBAGA1UE
|
835 |
-
ChMJQmFsdGltb3JlMRMwEQYDVQQLEwpDeWJlclRydXN0MSIwIAYDVQQDExlCYWx0aW1vcmUgQ3li
|
836 |
-
ZXJUcnVzdCBSb290MB4XDTAwMDUxMjE4NDYwMFoXDTI1MDUxMjIzNTkwMFowWjELMAkGA1UEBhMC
|
837 |
-
SUUxEjAQBgNVBAoTCUJhbHRpbW9yZTETMBEGA1UECxMKQ3liZXJUcnVzdDEiMCAGA1UEAxMZQmFs
|
838 |
-
dGltb3JlIEN5YmVyVHJ1c3QgUm9vdDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKME
|
839 |
-
uyKrmD1X6CZymrV51Cni4eiVgLGw41uOKymaZN+hXe2wCQVt2yguzmKiYv60iNoS6zjrIZ3AQSsB
|
840 |
-
UnuId9Mcj8e6uYi1agnnc+gRQKfRzMpijS3ljwumUNKoUMMo6vWrJYeKmpYcqWe4PwzV9/lSEy/C
|
841 |
-
G9VwcPCPwBLKBsua4dnKM3p31vjsufFoREJIE9LAwqSuXmD+tqYF/LTdB1kC1FkYmGP1pWPgkAx9
|
842 |
-
XbIGevOF6uvUA65ehD5f/xXtabz5OTZydc93Uk3zyZAsuT3lySNTPx8kmCFcB5kpvcY67Oduhjpr
|
843 |
-
l3RjM71oGDHweI12v/yejl0qhqdNkNwnGjkCAwEAAaNFMEMwHQYDVR0OBBYEFOWdWTCCR1jMrPoI
|
844 |
-
VDaGezq1BE3wMBIGA1UdEwEB/wQIMAYBAf8CAQMwDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3DQEB
|
845 |
-
BQUAA4IBAQCFDF2O5G9RaEIFoN27TyclhAO992T9Ldcw46QQF+vaKSm2eT929hkTI7gQCvlYpNRh
|
846 |
-
cL0EYWoSihfVCr3FvDB81ukMJY2GQE/szKN+OMY3EU/t3WgxjkzSswF07r51XgdIGn9w/xZchMB5
|
847 |
-
hbgF/X++ZRGjD8ACtPhSNzkE1akxehi/oCr0Epn3o0WC4zxe9Z2etciefC7IpJ5OCBRLbf1wbWsa
|
848 |
-
Y71k5h+3zvDyny67G7fyUIhzksLi4xaNmjICq44Y3ekQEe5+NauQrz4wlHrQMz2nZQ/1/I6eYs9H
|
849 |
-
RCwBXbsdtTLSR9I4LtD+gdwyah617jzV/OeBHRnDJELqYzmp
|
850 |
-
-----END CERTIFICATE-----
|
851 |
-
|
852 |
-
AddTrust External Root
|
853 |
-
======================
|
854 |
-
-----BEGIN CERTIFICATE-----
|
855 |
-
MIIENjCCAx6gAwIBAgIBATANBgkqhkiG9w0BAQUFADBvMQswCQYDVQQGEwJTRTEUMBIGA1UEChML
|
856 |
-
QWRkVHJ1c3QgQUIxJjAkBgNVBAsTHUFkZFRydXN0IEV4dGVybmFsIFRUUCBOZXR3b3JrMSIwIAYD
|
857 |
-
VQQDExlBZGRUcnVzdCBFeHRlcm5hbCBDQSBSb290MB4XDTAwMDUzMDEwNDgzOFoXDTIwMDUzMDEw
|
858 |
-
NDgzOFowbzELMAkGA1UEBhMCU0UxFDASBgNVBAoTC0FkZFRydXN0IEFCMSYwJAYDVQQLEx1BZGRU
|
859 |
-
cnVzdCBFeHRlcm5hbCBUVFAgTmV0d29yazEiMCAGA1UEAxMZQWRkVHJ1c3QgRXh0ZXJuYWwgQ0Eg
|
860 |
-
Um9vdDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALf3GjPm8gAELTngTlvtH7xsD821
|
861 |
-
+iO2zt6bETOXpClMfZOfvUq8k+0DGuOPz+VtUFrWlymUWoCwSXrbLpX9uMq/NzgtHj6RQa1wVsfw
|
862 |
-
Tz/oMp50ysiQVOnGXw94nZpAPA6sYapeFI+eh6FqUNzXmk6vBbOmcZSccbNQYArHE504B4YCqOmo
|
863 |
-
aSYYkKtMsE8jqzpPhNjfzp/haW+710LXa0Tkx63ubUFfclpxCDezeWWkWaCUN/cALw3CknLa0Dhy
|
864 |
-
2xSoRcRdKn23tNbE7qzNE0S3ySvdQwAl+mG5aWpYIxG3pzOPVnVZ9c0p10a3CitlttNCbxWyuHv7
|
865 |
-
7+ldU9U0WicCAwEAAaOB3DCB2TAdBgNVHQ4EFgQUrb2YejS0Jvf6xCZU7wO94CTLVBowCwYDVR0P
|
866 |
-
BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wgZkGA1UdIwSBkTCBjoAUrb2YejS0Jvf6xCZU7wO94CTL
|
867 |
-
VBqhc6RxMG8xCzAJBgNVBAYTAlNFMRQwEgYDVQQKEwtBZGRUcnVzdCBBQjEmMCQGA1UECxMdQWRk
|
868 |
-
VHJ1c3QgRXh0ZXJuYWwgVFRQIE5ldHdvcmsxIjAgBgNVBAMTGUFkZFRydXN0IEV4dGVybmFsIENB
|
869 |
-
IFJvb3SCAQEwDQYJKoZIhvcNAQEFBQADggEBALCb4IUlwtYj4g+WBpKdQZic2YR5gdkeWxQHIzZl
|
870 |
-
j7DYd7usQWxHYINRsPkyPef89iYTx4AWpb9a/IfPeHmJIZriTAcKhjW88t5RxNKWt9x+Tu5w/Rw5
|
871 |
-
6wwCURQtjr0W4MHfRnXnJK3s9EK0hZNwEGe6nQY1ShjTK3rMUUKhemPR5ruhxSvCNr4TDea9Y355
|
872 |
-
e6cJDUCrat2PisP29owaQgVR1EX1n6diIWgVIEM8med8vSTYqZEXc4g/VhsxOBi0cQ+azcgOno4u
|
873 |
-
G+GMmIPLHzHxREzGBHNJdmAPx/i9F4BrLunMTA5amnkPIAou1Z5jJh5VkpTYghdae9C8x49OhgQ=
|
874 |
-
-----END CERTIFICATE-----
|
875 |
-
|
876 |
-
Entrust Root Certification Authority
|
877 |
-
====================================
|
878 |
-
-----BEGIN CERTIFICATE-----
|
879 |
-
MIIEkTCCA3mgAwIBAgIERWtQVDANBgkqhkiG9w0BAQUFADCBsDELMAkGA1UEBhMCVVMxFjAUBgNV
|
880 |
-
BAoTDUVudHJ1c3QsIEluYy4xOTA3BgNVBAsTMHd3dy5lbnRydXN0Lm5ldC9DUFMgaXMgaW5jb3Jw
|
881 |
-
b3JhdGVkIGJ5IHJlZmVyZW5jZTEfMB0GA1UECxMWKGMpIDIwMDYgRW50cnVzdCwgSW5jLjEtMCsG
|
882 |
-
A1UEAxMkRW50cnVzdCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTA2MTEyNzIwMjM0
|
883 |
-
MloXDTI2MTEyNzIwNTM0MlowgbAxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1FbnRydXN0LCBJbmMu
|
884 |
-
MTkwNwYDVQQLEzB3d3cuZW50cnVzdC5uZXQvQ1BTIGlzIGluY29ycG9yYXRlZCBieSByZWZlcmVu
|
885 |
-
Y2UxHzAdBgNVBAsTFihjKSAyMDA2IEVudHJ1c3QsIEluYy4xLTArBgNVBAMTJEVudHJ1c3QgUm9v
|
886 |
-
dCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB
|
887 |
-
ALaVtkNC+sZtKm9I35RMOVcF7sN5EUFoNu3s/poBj6E4KPz3EEZmLk0eGrEaTsbRwJWIsMn/MYsz
|
888 |
-
A9u3g3s+IIRe7bJWKKf44LlAcTfFy0cOlypowCKVYhXbR9n10Cv/gkvJrT7eTNuQgFA/CYqEAOww
|
889 |
-
Cj0Yzfv9KlmaI5UXLEWeH25DeW0MXJj+SKfFI0dcXv1u5x609mhF0YaDW6KKjbHjKYD+JXGIrb68
|
890 |
-
j6xSlkuqUY3kEzEZ6E5Nn9uss2rVvDlUccp6en+Q3X0dgNmBu1kmwhH+5pPi94DkZfs0Nw4pgHBN
|
891 |
-
rziGLp5/V6+eF67rHMsoIV+2HNjnogQi+dPa2MsCAwEAAaOBsDCBrTAOBgNVHQ8BAf8EBAMCAQYw
|
892 |
-
DwYDVR0TAQH/BAUwAwEB/zArBgNVHRAEJDAigA8yMDA2MTEyNzIwMjM0MlqBDzIwMjYxMTI3MjA1
|
893 |
-
MzQyWjAfBgNVHSMEGDAWgBRokORnpKZTgMeGZqTx90tD+4S9bTAdBgNVHQ4EFgQUaJDkZ6SmU4DH
|
894 |
-
hmak8fdLQ/uEvW0wHQYJKoZIhvZ9B0EABBAwDhsIVjcuMTo0LjADAgSQMA0GCSqGSIb3DQEBBQUA
|
895 |
-
A4IBAQCT1DCw1wMgKtD5Y+iRDAUgqV8ZyntyTtSx29CW+1RaGSwMCPeyvIWonX9tO1KzKtvn1ISM
|
896 |
-
Y/YPyyYBkVBs9F8U4pN0wBOeMDpQ47RgxRzwIkSNcUesyBrJ6ZuaAGAT/3B+XxFNSRuzFVJ7yVTa
|
897 |
-
v52Vr2ua2J7p8eRDjeIRRDq/r72DQnNSi6q7pynP9WQcCk3RvKqsnyrQ/39/2n3qse0wJcGE2jTS
|
898 |
-
W3iDVuycNsMm4hH2Z0kdkquM++v/eu6FSqdQgPCnXEqULl8FmTxSQeDNtGPPAUO6nIPcj2A781q0
|
899 |
-
tHuu2guQOHXvgR1m0vdXcDazv/wor3ElhVsT/h5/WrQ8
|
900 |
-
-----END CERTIFICATE-----
|
901 |
-
|
902 |
-
GeoTrust Global CA
|
903 |
-
==================
|
904 |
-
-----BEGIN CERTIFICATE-----
|
905 |
-
MIIDVDCCAjygAwIBAgIDAjRWMA0GCSqGSIb3DQEBBQUAMEIxCzAJBgNVBAYTAlVTMRYwFAYDVQQK
|
906 |
-
Ew1HZW9UcnVzdCBJbmMuMRswGQYDVQQDExJHZW9UcnVzdCBHbG9iYWwgQ0EwHhcNMDIwNTIxMDQw
|
907 |
-
MDAwWhcNMjIwNTIxMDQwMDAwWjBCMQswCQYDVQQGEwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5j
|
908 |
-
LjEbMBkGA1UEAxMSR2VvVHJ1c3QgR2xvYmFsIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB
|
909 |
-
CgKCAQEA2swYYzD99BcjGlZ+W988bDjkcbd4kdS8odhM+KhDtgPpTSEHCIjaWC9mOSm9BXiLnTjo
|
910 |
-
BbdqfnGk5sRgprDvgOSJKA+eJdbtg/OtppHHmMlCGDUUna2YRpIuT8rxh0PBFpVXLVDviS2Aelet
|
911 |
-
8u5fa9IAjbkU+BQVNdnARqN7csiRv8lVK83Qlz6cJmTM386DGXHKTubU1XupGc1V3sjs0l44U+Vc
|
912 |
-
T4wt/lAjNvxm5suOpDkZALeVAjmRCw7+OC7RHQWa9k0+bw8HHa8sHo9gOeL6NlMTOdReJivbPagU
|
913 |
-
vTLrGAMoUgRx5aszPeE4uwc2hGKceeoWMPRfwCvocWvk+QIDAQABo1MwUTAPBgNVHRMBAf8EBTAD
|
914 |
-
AQH/MB0GA1UdDgQWBBTAephojYn7qwVkDBF9qn1luMrMTjAfBgNVHSMEGDAWgBTAephojYn7qwVk
|
915 |
-
DBF9qn1luMrMTjANBgkqhkiG9w0BAQUFAAOCAQEANeMpauUvXVSOKVCUn5kaFOSPeCpilKInZ57Q
|
916 |
-
zxpeR+nBsqTP3UEaBU6bS+5Kb1VSsyShNwrrZHYqLizz/Tt1kL/6cdjHPTfStQWVYrmm3ok9Nns4
|
917 |
-
d0iXrKYgjy6myQzCsplFAMfOEVEiIuCl6rYVSAlk6l5PdPcFPseKUgzbFbS9bZvlxrFUaKnjaZC2
|
918 |
-
mqUPuLk/IH2uSrW4nOQdtqvmlKXBx4Ot2/Unhw4EbNX/3aBd7YdStysVAq45pmp06drE57xNNB6p
|
919 |
-
XE0zX5IJL4hmXXeXxx12E6nV5fEWCRE11azbJHFwLJhWC9kXtNHjUStedejV0NxPNO3CBWaAocvm
|
920 |
-
Mw==
|
921 |
-
-----END CERTIFICATE-----
|
922 |
-
|
923 |
-
GeoTrust Universal CA
|
924 |
-
=====================
|
925 |
-
-----BEGIN CERTIFICATE-----
|
926 |
-
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
-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
-
MDAwMFoXDTI5MDMwNDA1MDAwMFowRTELMAkGA1UEBhMCVVMxFjAUBgNVBAoTDUdlb1RydXN0IElu
|
929 |
-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
-
ADCCAgoCggIBAKYVVaCjxuAfjJ0hUNfBvitbtaSeodlyWL0AG0y/YckUHUWCq8YdgNY96xCcOq9t
|
931 |
-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
-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
-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
-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
-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
-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
-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
-
KGNZMN9QAZxjiRqf2xeUgnA3wySemkfWWspOqGmJch+RbNt+nhutxx9z3SxPGWX9f5NAEC7S8O08
|
939 |
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
|
950 |
-
P/rmMuGNG2+k5o7Y+SlIis5z/iw=
|
951 |
-
-----END CERTIFICATE-----
|
952 |
-
|
953 |
-
GeoTrust Universal CA 2
|
954 |
-
=======================
|
955 |
-
-----BEGIN CERTIFICATE-----
|
956 |
-
MIIFbDCCA1SgAwIBAgIBATANBgkqhkiG9w0BAQUFADBHMQswCQYDVQQGEwJVUzEWMBQGA1UEChMN
|
957 |
-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
-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
-
SW5jLjEgMB4GA1UEAxMXR2VvVHJ1c3QgVW5pdmVyc2FsIENBIDIwggIiMA0GCSqGSIb3DQEBAQUA
|
960 |
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-
+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
-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
-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
-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
-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
-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
-
Y+RdM4kX2TGq2tbzGDVyz4crL2MjhF2EjD9XoIj8mZEoJmmZ1I+XRL6O1UixpCgp8RW04eWe3fiP
|
977 |
-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
-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
-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
|
980 |
-
X36vWkzaH6byHCx+rgIW0lbQL1dTR+iS
|
981 |
-
-----END CERTIFICATE-----
|
982 |
-
|
983 |
-
Visa eCommerce Root
|
984 |
-
===================
|
985 |
-
-----BEGIN CERTIFICATE-----
|
986 |
-
MIIDojCCAoqgAwIBAgIQE4Y1TR0/BvLB+WUF1ZAcYjANBgkqhkiG9w0BAQUFADBrMQswCQYDVQQG
|
987 |
-
EwJVUzENMAsGA1UEChMEVklTQTEvMC0GA1UECxMmVmlzYSBJbnRlcm5hdGlvbmFsIFNlcnZpY2Ug
|
988 |
-
QXNzb2NpYXRpb24xHDAaBgNVBAMTE1Zpc2EgZUNvbW1lcmNlIFJvb3QwHhcNMDIwNjI2MDIxODM2
|
989 |
-
WhcNMjIwNjI0MDAxNjEyWjBrMQswCQYDVQQGEwJVUzENMAsGA1UEChMEVklTQTEvMC0GA1UECxMm
|
990 |
-
VmlzYSBJbnRlcm5hdGlvbmFsIFNlcnZpY2UgQXNzb2NpYXRpb24xHDAaBgNVBAMTE1Zpc2EgZUNv
|
991 |
-
bW1lcmNlIFJvb3QwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCvV95WHm6h2mCxlCfL
|
992 |
-
F9sHP4CFT8icttD0b0/Pmdjh28JIXDqsOTPHH2qLJj0rNfVIsZHBAk4ElpF7sDPwsRROEW+1QK8b
|
993 |
-
RaVK7362rPKgH1g/EkZgPI2h4H3PVz4zHvtH8aoVlwdVZqW1LS7YgFmypw23RuwhY/81q6UCzyr0
|
994 |
-
TP579ZRdhE2o8mCP2w4lPJ9zcc+U30rq299yOIzzlr3xF7zSujtFWsan9sYXiwGd/BmoKoMWuDpI
|
995 |
-
/k4+oKsGGelT84ATB+0tvz8KPFUgOSwsAGl0lUq8ILKpeeUYiZGo3BxN77t+Nwtd/jmliFKMAGzs
|
996 |
-
GHxBvfaLdXe6YJ2E5/4tAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEG
|
997 |
-
MB0GA1UdDgQWBBQVOIMPPyw/cDMezUb+B4wg4NfDtzANBgkqhkiG9w0BAQUFAAOCAQEAX/FBfXxc
|
998 |
-
CLkr4NWSR/pnXKUTwwMhmytMiUbPWU3J/qVAtmPN3XEolWcRzCSs00Rsca4BIGsDoo8Ytyk6feUW
|
999 |
-
YFN4PMCvFYP3j1IzJL1kk5fui/fbGKhtcbP3LBfQdCVp9/5rPJS+TUtBjE7ic9DjkCJzQ83z7+pz
|
1000 |
-
zkWKsKZJ/0x9nXGIxHYdkFsd7v3M9+79YKWxehZx0RbQfBI8bGmX265fOZpwLwU8GUYEmSA20GBu
|
1001 |
-
YQa7FkKMcPcw++DbZqMAAb3mLNqRX6BGi01qnD093QVG/na/oAo85ADmJ7f/hC3euiInlhBx6yLt
|
1002 |
-
398znM/jra6O1I7mT1GvFpLgXPYHDw==
|
1003 |
-
-----END CERTIFICATE-----
|
1004 |
-
|
1005 |
-
Comodo AAA Services root
|
1006 |
-
========================
|
1007 |
-
-----BEGIN CERTIFICATE-----
|
1008 |
-
MIIEMjCCAxqgAwIBAgIBATANBgkqhkiG9w0BAQUFADB7MQswCQYDVQQGEwJHQjEbMBkGA1UECAwS
|
1009 |
-
R3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxmb3JkMRowGAYDVQQKDBFDb21vZG8gQ0Eg
|
1010 |
-
TGltaXRlZDEhMB8GA1UEAwwYQUFBIENlcnRpZmljYXRlIFNlcnZpY2VzMB4XDTA0MDEwMTAwMDAw
|
1011 |
-
MFoXDTI4MTIzMTIzNTk1OVowezELMAkGA1UEBhMCR0IxGzAZBgNVBAgMEkdyZWF0ZXIgTWFuY2hl
|
1012 |
-
c3RlcjEQMA4GA1UEBwwHU2FsZm9yZDEaMBgGA1UECgwRQ29tb2RvIENBIExpbWl0ZWQxITAfBgNV
|
1013 |
-
BAMMGEFBQSBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC
|
1014 |
-
ggEBAL5AnfRu4ep2hxxNRUSOvkbIgwadwSr+GB+O5AL686tdUIoWMQuaBtDFcCLNSS1UY8y2bmhG
|
1015 |
-
C1Pqy0wkwLxyTurxFa70VJoSCsN6sjNg4tqJVfMiWPPe3M/vg4aijJRPn2jymJBGhCfHdr/jzDUs
|
1016 |
-
i14HZGWCwEiwqJH5YZ92IFCokcdmtet4YgNW8IoaE+oxox6gmf049vYnMlhvB/VruPsUK6+3qszW
|
1017 |
-
Y19zjNoFmag4qMsXeDZRrOme9Hg6jc8P2ULimAyrL58OAd7vn5lJ8S3frHRNG5i1R8XlKdH5kBjH
|
1018 |
-
Ypy+g8cmez6KJcfA3Z3mNWgQIJ2P2N7Sw4ScDV7oL8kCAwEAAaOBwDCBvTAdBgNVHQ4EFgQUoBEK
|
1019 |
-
Iz6W8Qfs4q8p74Klf9AwpLQwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wewYDVR0f
|
1020 |
-
BHQwcjA4oDagNIYyaHR0cDovL2NybC5jb21vZG9jYS5jb20vQUFBQ2VydGlmaWNhdGVTZXJ2aWNl
|
1021 |
-
cy5jcmwwNqA0oDKGMGh0dHA6Ly9jcmwuY29tb2RvLm5ldC9BQUFDZXJ0aWZpY2F0ZVNlcnZpY2Vz
|
1022 |
-
LmNybDANBgkqhkiG9w0BAQUFAAOCAQEACFb8AvCb6P+k+tZ7xkSAzk/ExfYAWMymtrwUSWgEdujm
|
1023 |
-
7l3sAg9g1o1QGE8mTgHj5rCl7r+8dFRBv/38ErjHT1r0iWAFf2C3BUrz9vHCv8S5dIa2LX1rzNLz
|
1024 |
-
Rt0vxuBqw8M0Ayx9lt1awg6nCpnBBYurDC/zXDrPbDdVCYfeU0BsWO/8tqtlbgT2G9w84FoVxp7Z
|
1025 |
-
8VlIMCFlA2zs6SFz7JsDoeA3raAVGI/6ugLOpyypEBMs1OUIJqsil2D4kF501KKaU73yqWjgom7C
|
1026 |
-
12yxow+ev+to51byrvLjKzg6CYG1a4XXvi3tPxq3smPi9WIsgtRqAEFQ8TmDn5XpNpaYbg==
|
1027 |
-
-----END CERTIFICATE-----
|
1028 |
-
|
1029 |
-
QuoVadis Root CA
|
1030 |
-
================
|
1031 |
-
-----BEGIN CERTIFICATE-----
|
1032 |
-
MIIF0DCCBLigAwIBAgIEOrZQizANBgkqhkiG9w0BAQUFADB/MQswCQYDVQQGEwJCTTEZMBcGA1UE
|
1033 |
-
ChMQUXVvVmFkaXMgTGltaXRlZDElMCMGA1UECxMcUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0
|
1034 |
-
eTEuMCwGA1UEAxMlUXVvVmFkaXMgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wMTAz
|
1035 |
-
MTkxODMzMzNaFw0yMTAzMTcxODMzMzNaMH8xCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRp
|
1036 |
-
cyBMaW1pdGVkMSUwIwYDVQQLExxSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MS4wLAYDVQQD
|
1037 |
-
EyVRdW9WYWRpcyBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEF
|
1038 |
-
AAOCAQ8AMIIBCgKCAQEAv2G1lVO6V/z68mcLOhrfEYBklbTRvM16z/Ypli4kVEAkOPcahdxYTMuk
|
1039 |
-
J0KX0J+DisPkBgNbAKVRHnAEdOLB1Dqr1607BxgFjv2DrOpm2RgbaIr1VxqYuvXtdj182d6UajtL
|
1040 |
-
F8HVj71lODqV0D1VNk7feVcxKh7YWWVJWCCYfqtffp/p1k3sg3Spx2zY7ilKhSoGFPlU5tPaZQeL
|
1041 |
-
YzcS19Dsw3sgQUSj7cugF+FxZc4dZjH3dgEZyH0DWLaVSR2mEiboxgx24ONmy+pdpibu5cxfvWen
|
1042 |
-
AScOospUxbF6lR1xHkopigPcakXBpBlebzbNw6Kwt/5cOOJSvPhEQ+aQuwIDAQABo4ICUjCCAk4w
|
1043 |
-
PQYIKwYBBQUHAQEEMTAvMC0GCCsGAQUFBzABhiFodHRwczovL29jc3AucXVvdmFkaXNvZmZzaG9y
|
1044 |
-
ZS5jb20wDwYDVR0TAQH/BAUwAwEB/zCCARoGA1UdIASCAREwggENMIIBCQYJKwYBBAG+WAABMIH7
|
1045 |
-
MIHUBggrBgEFBQcCAjCBxxqBxFJlbGlhbmNlIG9uIHRoZSBRdW9WYWRpcyBSb290IENlcnRpZmlj
|
1046 |
-
YXRlIGJ5IGFueSBwYXJ0eSBhc3N1bWVzIGFjY2VwdGFuY2Ugb2YgdGhlIHRoZW4gYXBwbGljYWJs
|
1047 |
-
ZSBzdGFuZGFyZCB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB1c2UsIGNlcnRpZmljYXRpb24gcHJh
|
1048 |
-
Y3RpY2VzLCBhbmQgdGhlIFF1b1ZhZGlzIENlcnRpZmljYXRlIFBvbGljeS4wIgYIKwYBBQUHAgEW
|
1049 |
-
Fmh0dHA6Ly93d3cucXVvdmFkaXMuYm0wHQYDVR0OBBYEFItLbe3TKbkGGew5Oanwl4Rqy+/fMIGu
|
1050 |
-
BgNVHSMEgaYwgaOAFItLbe3TKbkGGew5Oanwl4Rqy+/foYGEpIGBMH8xCzAJBgNVBAYTAkJNMRkw
|
1051 |
-
FwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMSUwIwYDVQQLExxSb290IENlcnRpZmljYXRpb24gQXV0
|
1052 |
-
aG9yaXR5MS4wLAYDVQQDEyVRdW9WYWRpcyBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5ggQ6
|
1053 |
-
tlCLMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQUFAAOCAQEAitQUtf70mpKnGdSkfnIYj9lo
|
1054 |
-
fFIk3WdvOXrEql494liwTXCYhGHoG+NpGA7O+0dQoE7/8CQfvbLO9Sf87C9TqnN7Az10buYWnuul
|
1055 |
-
LsS/VidQK2K6vkscPFVcQR0kvoIgR13VRH56FmjffU1RcHhXHTMe/QKZnAzNCgVPx7uOpHX6Sm2x
|
1056 |
-
gI4JVrmcGmD+XcHXetwReNDWXcG31a0ymQM6isxUJTkxgXsTIlG6Rmyhu576BGxJJnSP0nPrzDCi
|
1057 |
-
5upZIof4l/UO/erMkqQWxFIY6iHOsfHmhIHluqmGKPJDWl0Snawe2ajlCmqnf6CHKc/yiU3U7MXi
|
1058 |
-
5nrQNiOKSnQ2+Q==
|
1059 |
-
-----END CERTIFICATE-----
|
1060 |
-
|
1061 |
-
QuoVadis Root CA 2
|
1062 |
-
==================
|
1063 |
-
-----BEGIN CERTIFICATE-----
|
1064 |
-
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
-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
-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
-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
-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
-
XJxgFyo6dIMzMH1hVBHL7avg5tKifvVrbxi3Cgst/ek+7wrGsxDp3MJGF/hd/aTa/55JWpzmM+Yk
|
1070 |
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-
UIHmfLTJDQtyU/h2BwdBR5YM++CCJpNVjP4iH2BlfF/nJrP3MpCYUNQ3cVX2kiF495V5+vgtJodm
|
1083 |
-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
-
+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
-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
-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
-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
-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
-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
|
1090 |
-
-----END CERTIFICATE-----
|
1091 |
-
|
1092 |
-
QuoVadis Root CA 3
|
1093 |
-
==================
|
1094 |
-
-----BEGIN CERTIFICATE-----
|
1095 |
-
MIIGnTCCBIWgAwIBAgICBcYwDQYJKoZIhvcNAQEFBQAwRTELMAkGA1UEBhMCQk0xGTAXBgNVBAoT
|
1096 |
-
EFF1b1ZhZGlzIExpbWl0ZWQxGzAZBgNVBAMTElF1b1ZhZGlzIFJvb3QgQ0EgMzAeFw0wNjExMjQx
|
1097 |
-
OTExMjNaFw0zMTExMjQxOTA2NDRaMEUxCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBM
|
1098 |
-
aW1pdGVkMRswGQYDVQQDExJRdW9WYWRpcyBSb290IENBIDMwggIiMA0GCSqGSIb3DQEBAQUAA4IC
|
1099 |
-
DwAwggIKAoICAQDMV0IWVJzmmNPTTe7+7cefQzlKZbPoFog02w1ZkXTPkrgEQK0CSzGrvI2RaNgg
|
1100 |
-
DhoB4hp7Thdd4oq3P5kazethq8Jlph+3t723j/z9cI8LoGe+AaJZz3HmDyl2/7FWeUUrH556VOij
|
1101 |
-
KTVopAFPD6QuN+8bv+OPEKhyq1hX51SGyMnzW9os2l2ObjyjPtr7guXd8lyyBTNvijbO0BNO/79K
|
1102 |
-
DDRMpsMhvVAEVeuxu537RR5kFd5VAYwCdrXLoT9CabwvvWhDFlaJKjdhkf2mrk7AyxRllDdLkgbv
|
1103 |
-
BNDInIjbC3uBr7E9KsRlOni27tyAsdLTmZw67mtaa7ONt9XOnMK+pUsvFrGeaDsGb659n/je7Mwp
|
1104 |
-
p5ijJUMv7/FfJuGITfhebtfZFG4ZM2mnO4SJk8RTVROhUXhA+LjJou57ulJCg54U7QVSWllWp5f8
|
1105 |
-
nT8KKdjcT5EOE7zelaTfi5m+rJsziO+1ga8bxiJTyPbH7pcUsMV8eFLI8M5ud2CEpukqdiDtWAEX
|
1106 |
-
MJPpGovgc2PZapKUSU60rUqFxKMiMPwJ7Wgic6aIDFUhWMXhOp8q3crhkODZc6tsgLjoC2SToJyM
|
1107 |
-
Gf+z0gzskSaHirOi4XCPLArlzW1oUevaPwV/izLmE1xr/l9A4iLItLRkT9a6fUg+qGkM17uGcclz
|
1108 |
-
uD87nSVL2v9A6wIDAQABo4IBlTCCAZEwDwYDVR0TAQH/BAUwAwEB/zCB4QYDVR0gBIHZMIHWMIHT
|
1109 |
-
BgkrBgEEAb5YAAMwgcUwgZMGCCsGAQUFBwICMIGGGoGDQW55IHVzZSBvZiB0aGlzIENlcnRpZmlj
|
1110 |
-
YXRlIGNvbnN0aXR1dGVzIGFjY2VwdGFuY2Ugb2YgdGhlIFF1b1ZhZGlzIFJvb3QgQ0EgMyBDZXJ0
|
1111 |
-
aWZpY2F0ZSBQb2xpY3kgLyBDZXJ0aWZpY2F0aW9uIFByYWN0aWNlIFN0YXRlbWVudC4wLQYIKwYB
|
1112 |
-
BQUHAgEWIWh0dHA6Ly93d3cucXVvdmFkaXNnbG9iYWwuY29tL2NwczALBgNVHQ8EBAMCAQYwHQYD
|
1113 |
-
VR0OBBYEFPLAE+CCQz777i9nMpY1XNu4ywLQMG4GA1UdIwRnMGWAFPLAE+CCQz777i9nMpY1XNu4
|
1114 |
-
ywLQoUmkRzBFMQswCQYDVQQGEwJCTTEZMBcGA1UEChMQUXVvVmFkaXMgTGltaXRlZDEbMBkGA1UE
|
1115 |
-
AxMSUXVvVmFkaXMgUm9vdCBDQSAzggIFxjANBgkqhkiG9w0BAQUFAAOCAgEAT62gLEz6wPJv92ZV
|
1116 |
-
qyM07ucp2sNbtrCD2dDQ4iH782CnO11gUyeim/YIIirnv6By5ZwkajGxkHon24QRiSemd1o417+s
|
1117 |
-
hvzuXYO8BsbRd2sPbSQvS3pspweWyuOEn62Iix2rFo1bZhfZFvSLgNLd+LJ2w/w4E6oM3kJpK27z
|
1118 |
-
POuAJ9v1pkQNn1pVWQvVDVJIxa6f8i+AxeoyUDUSly7B4f/xI4hROJ/yZlZ25w9Rl6VSDE1JUZU2
|
1119 |
-
Pb+iSwwQHYaZTKrzchGT5Or2m9qoXadNt54CrnMAyNojA+j56hl0YgCUyyIgvpSnWbWCar6ZeXqp
|
1120 |
-
8kokUvd0/bpO5qgdAm6xDYBEwa7TIzdfu4V8K5Iu6H6li92Z4b8nby1dqnuH/grdS/yO9SbkbnBC
|
1121 |
-
bjPsMZ57k8HkyWkaPcBrTiJt7qtYTcbQQcEr6k8Sh17rRdhs9ZgC06DYVYoGmRmioHfRMJ6szHXu
|
1122 |
-
g/WwYjnPbFfiTNKRCw51KBuav/0aQ/HKd/s7j2G4aSgWQgRecCocIdiP4b0jWy10QJLZYxkNc91p
|
1123 |
-
vGJHvOB0K7Lrfb5BG7XARsWhIstfTsEokt4YutUqKLsRixeTmJlglFwjz1onl14LBQaTNx47aTbr
|
1124 |
-
qZ5hHY8y2o4M1nQ+ewkk2gF3R8Q7zTSMmfXK4SVhM7JZG+Ju1zdXtg2pEto=
|
1125 |
-
-----END CERTIFICATE-----
|
1126 |
-
|
1127 |
-
Security Communication Root CA
|
1128 |
-
==============================
|
1129 |
-
-----BEGIN CERTIFICATE-----
|
1130 |
-
MIIDWjCCAkKgAwIBAgIBADANBgkqhkiG9w0BAQUFADBQMQswCQYDVQQGEwJKUDEYMBYGA1UEChMP
|
1131 |
-
U0VDT00gVHJ1c3QubmV0MScwJQYDVQQLEx5TZWN1cml0eSBDb21tdW5pY2F0aW9uIFJvb3RDQTEw
|
1132 |
-
HhcNMDMwOTMwMDQyMDQ5WhcNMjMwOTMwMDQyMDQ5WjBQMQswCQYDVQQGEwJKUDEYMBYGA1UEChMP
|
1133 |
-
U0VDT00gVHJ1c3QubmV0MScwJQYDVQQLEx5TZWN1cml0eSBDb21tdW5pY2F0aW9uIFJvb3RDQTEw
|
1134 |
-
ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCzs/5/022x7xZ8V6UMbXaKL0u/ZPtM7orw
|
1135 |
-
8yl89f/uKuDp6bpbZCKamm8sOiZpUQWZJtzVHGpxxpp9Hp3dfGzGjGdnSj74cbAZJ6kJDKaVv0uM
|
1136 |
-
DPpVmDvY6CKhS3E4eayXkmmziX7qIWgGmBSWh9JhNrxtJ1aeV+7AwFb9Ms+k2Y7CI9eNqPPYJayX
|
1137 |
-
5HA49LY6tJ07lyZDo6G8SVlyTCMwhwFY9k6+HGhWZq/NQV3Is00qVUarH9oe4kA92819uZKAnDfd
|
1138 |
-
DJZkndwi92SL32HeFZRSFaB9UslLqCHJxrHty8OVYNEP8Ktw+N/LTX7s1vqr2b1/VPKl6Xn62dZ2
|
1139 |
-
JChzAgMBAAGjPzA9MB0GA1UdDgQWBBSgc0mZaNyFW2XjmygvV5+9M7wHSDALBgNVHQ8EBAMCAQYw
|
1140 |
-
DwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQUFAAOCAQEAaECpqLvkT115swW1F7NgE+vGkl3g
|
1141 |
-
0dNq/vu+m22/xwVtWSDEHPC32oRYAmP6SBbvT6UL90qY8j+eG61Ha2POCEfrUj94nK9NrvjVT8+a
|
1142 |
-
mCoQQTlSxN3Zmw7vkwGusi7KaEIkQmywszo+zenaSMQVy+n5Bw+SUEmK3TGXX8npN6o7WWWXlDLJ
|
1143 |
-
s58+OmJYxUmtYg5xpTKqL8aJdkNAExNnPaJUJRDL8Try2frbSVa7pv6nQTXD4IhhyYjH3zYQIphZ
|
1144 |
-
6rBK+1YWc26sTfcioU+tHXotRSflMMFe8toTyyVCUZVHA4xsIcx0Qu1T/zOLjw9XARYvz6buyXAi
|
1145 |
-
FL39vmwLAw==
|
1146 |
-
-----END CERTIFICATE-----
|
1147 |
-
|
1148 |
-
Sonera Class 2 Root CA
|
1149 |
-
======================
|
1150 |
-
-----BEGIN CERTIFICATE-----
|
1151 |
-
MIIDIDCCAgigAwIBAgIBHTANBgkqhkiG9w0BAQUFADA5MQswCQYDVQQGEwJGSTEPMA0GA1UEChMG
|
1152 |
-
U29uZXJhMRkwFwYDVQQDExBTb25lcmEgQ2xhc3MyIENBMB4XDTAxMDQwNjA3Mjk0MFoXDTIxMDQw
|
1153 |
-
NjA3Mjk0MFowOTELMAkGA1UEBhMCRkkxDzANBgNVBAoTBlNvbmVyYTEZMBcGA1UEAxMQU29uZXJh
|
1154 |
-
IENsYXNzMiBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJAXSjWdyvANlsdE+hY3
|
1155 |
-
/Ei9vX+ALTU74W+oZ6m/AxxNjG8yR9VBaKQTBME1DJqEQ/xcHf+Js+gXGM2RX/uJ4+q/Tl18GybT
|
1156 |
-
dXnt5oTjV+WtKcT0OijnpXuENmmz/V52vaMtmdOQTiMofRhj8VQ7Jp12W5dCsv+u8E7s3TmVToMG
|
1157 |
-
f+dJQMjFAbJUWmYdPfz56TwKnoG4cPABi+QjVHzIrviQHgCWctRUz2EjvOr7nQKV0ba5cTppCD8P
|
1158 |
-
tOFCx4j1P5iop7oc4HFx71hXgVB6XGt0Rg6DA5jDjqhu8nYybieDwnPz3BjotJPqdURrBGAgcVeH
|
1159 |
-
nfO+oJAjPYok4doh28MCAwEAAaMzMDEwDwYDVR0TAQH/BAUwAwEB/zARBgNVHQ4ECgQISqCqWITT
|
1160 |
-
XjwwCwYDVR0PBAQDAgEGMA0GCSqGSIb3DQEBBQUAA4IBAQBazof5FnIVV0sd2ZvnoiYw7JNn39Yt
|
1161 |
-
0jSv9zilzqsWuasvfDXLrNAPtEwr/IDva4yRXzZ299uzGxnq9LIR/WFxRL8oszodv7ND6J+/3DEI
|
1162 |
-
cbCdjdY0RzKQxmUk96BKfARzjzlvF4xytb1LyHr4e4PDKE6cCepnP7JnBBvDFNr450kkkdAdavph
|
1163 |
-
Oe9r5yF1BgfYErQhIHBCcYHaPJo2vqZbDWpsmh+Re/n570K6Tk6ezAyNlNzZRZxe7EJQY670XcSx
|
1164 |
-
EtzKO6gunRRaBXW37Ndj4ro1tgQIkejanZz2ZrUYrAqmVCY0M9IbwdR/GjqOC6oybtv8TyWf2TLH
|
1165 |
-
llpwrN9M
|
1166 |
-
-----END CERTIFICATE-----
|
1167 |
-
|
1168 |
-
XRamp Global CA Root
|
1169 |
-
====================
|
1170 |
-
-----BEGIN CERTIFICATE-----
|
1171 |
-
MIIEMDCCAxigAwIBAgIQUJRs7Bjq1ZxN1ZfvdY+grTANBgkqhkiG9w0BAQUFADCBgjELMAkGA1UE
|
1172 |
-
BhMCVVMxHjAcBgNVBAsTFXd3dy54cmFtcHNlY3VyaXR5LmNvbTEkMCIGA1UEChMbWFJhbXAgU2Vj
|
1173 |
-
dXJpdHkgU2VydmljZXMgSW5jMS0wKwYDVQQDEyRYUmFtcCBHbG9iYWwgQ2VydGlmaWNhdGlvbiBB
|
1174 |
-
dXRob3JpdHkwHhcNMDQxMTAxMTcxNDA0WhcNMzUwMTAxMDUzNzE5WjCBgjELMAkGA1UEBhMCVVMx
|
1175 |
-
HjAcBgNVBAsTFXd3dy54cmFtcHNlY3VyaXR5LmNvbTEkMCIGA1UEChMbWFJhbXAgU2VjdXJpdHkg
|
1176 |
-
U2VydmljZXMgSW5jMS0wKwYDVQQDEyRYUmFtcCBHbG9iYWwgQ2VydGlmaWNhdGlvbiBBdXRob3Jp
|
1177 |
-
dHkwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCYJB69FbS638eMpSe2OAtp87ZOqCwu
|
1178 |
-
IR1cRN8hXX4jdP5efrRKt6atH67gBhbim1vZZ3RrXYCPKZ2GG9mcDZhtdhAoWORlsH9KmHmf4MMx
|
1179 |
-
foArtYzAQDsRhtDLooY2YKTVMIJt2W7QDxIEM5dfT2Fa8OT5kavnHTu86M/0ay00fOJIYRyO82FE
|
1180 |
-
zG+gSqmUsE3a56k0enI4qEHMPJQRfevIpoy3hsvKMzvZPTeL+3o+hiznc9cKV6xkmxnr9A8ECIqs
|
1181 |
-
AxcZZPRaJSKNNCyy9mgdEm3Tih4U2sSPpuIjhdV6Db1q4Ons7Be7QhtnqiXtRYMh/MHJfNViPvry
|
1182 |
-
xS3T/dRlAgMBAAGjgZ8wgZwwEwYJKwYBBAGCNxQCBAYeBABDAEEwCwYDVR0PBAQDAgGGMA8GA1Ud
|
1183 |
-
EwEB/wQFMAMBAf8wHQYDVR0OBBYEFMZPoj0GY4QJnM5i5ASsjVy16bYbMDYGA1UdHwQvMC0wK6Ap
|
1184 |
-
oCeGJWh0dHA6Ly9jcmwueHJhbXBzZWN1cml0eS5jb20vWEdDQS5jcmwwEAYJKwYBBAGCNxUBBAMC
|
1185 |
-
AQEwDQYJKoZIhvcNAQEFBQADggEBAJEVOQMBG2f7Shz5CmBbodpNl2L5JFMn14JkTpAuw0kbK5rc
|
1186 |
-
/Kh4ZzXxHfARvbdI4xD2Dd8/0sm2qlWkSLoC295ZLhVbO50WfUfXN+pfTXYSNrsf16GBBEYgoyxt
|
1187 |
-
qZ4Bfj8pzgCT3/3JknOJiWSe5yvkHJEs0rnOfc5vMZnT5r7SHpDwCRR5XCOrTdLaIR9NmXmd4c8n
|
1188 |
-
nxCbHIgNsIpkQTG4DmyQJKSbXHGPurt+HBvbaoAPIbzp26a3QPSyi6mx5O+aGtA9aZnuqCij4Tyz
|
1189 |
-
8LIRnM98QObd50N9otg6tamN8jSZxNQQ4Qb9CYQQO+7ETPTsJ3xCwnR8gooJybQDJbw=
|
1190 |
-
-----END CERTIFICATE-----
|
1191 |
-
|
1192 |
-
Go Daddy Class 2 CA
|
1193 |
-
===================
|
1194 |
-
-----BEGIN CERTIFICATE-----
|
1195 |
-
MIIEADCCAuigAwIBAgIBADANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJVUzEhMB8GA1UEChMY
|
1196 |
-
VGhlIEdvIERhZGR5IEdyb3VwLCBJbmMuMTEwLwYDVQQLEyhHbyBEYWRkeSBDbGFzcyAyIENlcnRp
|
1197 |
-
ZmljYXRpb24gQXV0aG9yaXR5MB4XDTA0MDYyOTE3MDYyMFoXDTM0MDYyOTE3MDYyMFowYzELMAkG
|
1198 |
-
A1UEBhMCVVMxITAfBgNVBAoTGFRoZSBHbyBEYWRkeSBHcm91cCwgSW5jLjExMC8GA1UECxMoR28g
|
1199 |
-
RGFkZHkgQ2xhc3MgMiBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCCASAwDQYJKoZIhvcNAQEBBQAD
|
1200 |
-
ggENADCCAQgCggEBAN6d1+pXGEmhW+vXX0iG6r7d/+TvZxz0ZWizV3GgXne77ZtJ6XCAPVYYYwhv
|
1201 |
-
2vLM0D9/AlQiVBDYsoHUwHU9S3/Hd8M+eKsaA7Ugay9qK7HFiH7Eux6wwdhFJ2+qN1j3hybX2C32
|
1202 |
-
qRe3H3I2TqYXP2WYktsqbl2i/ojgC95/5Y0V4evLOtXiEqITLdiOr18SPaAIBQi2XKVlOARFmR6j
|
1203 |
-
YGB0xUGlcmIbYsUfb18aQr4CUWWoriMYavx4A6lNf4DD+qta/KFApMoZFv6yyO9ecw3ud72a9nmY
|
1204 |
-
vLEHZ6IVDd2gWMZEewo+YihfukEHU1jPEX44dMX4/7VpkI+EdOqXG68CAQOjgcAwgb0wHQYDVR0O
|
1205 |
-
BBYEFNLEsNKR1EwRcbNhyz2h/t2oatTjMIGNBgNVHSMEgYUwgYKAFNLEsNKR1EwRcbNhyz2h/t2o
|
1206 |
-
atTjoWekZTBjMQswCQYDVQQGEwJVUzEhMB8GA1UEChMYVGhlIEdvIERhZGR5IEdyb3VwLCBJbmMu
|
1207 |
-
MTEwLwYDVQQLEyhHbyBEYWRkeSBDbGFzcyAyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5ggEAMAwG
|
1208 |
-
A1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBADJL87LKPpH8EsahB4yOd6AzBhRckB4Y9wim
|
1209 |
-
PQoZ+YeAEW5p5JYXMP80kWNyOO7MHAGjHZQopDH2esRU1/blMVgDoszOYtuURXO1v0XJJLXVggKt
|
1210 |
-
I3lpjbi2Tc7PTMozI+gciKqdi0FuFskg5YmezTvacPd+mSYgFFQlq25zheabIZ0KbIIOqPjCDPoQ
|
1211 |
-
HmyW74cNxA9hi63ugyuV+I6ShHI56yDqg+2DzZduCLzrTia2cyvk0/ZM/iZx4mERdEr/VxqHD3VI
|
1212 |
-
Ls9RaRegAhJhldXRQLIQTO7ErBBDpqWeCtWVYpoNz4iCxTIM5CufReYNnyicsbkqWletNw+vHX/b
|
1213 |
-
vZ8=
|
1214 |
-
-----END CERTIFICATE-----
|
1215 |
-
|
1216 |
-
Starfield Class 2 CA
|
1217 |
-
====================
|
1218 |
-
-----BEGIN CERTIFICATE-----
|
1219 |
-
MIIEDzCCAvegAwIBAgIBADANBgkqhkiG9w0BAQUFADBoMQswCQYDVQQGEwJVUzElMCMGA1UEChMc
|
1220 |
-
U3RhcmZpZWxkIFRlY2hub2xvZ2llcywgSW5jLjEyMDAGA1UECxMpU3RhcmZpZWxkIENsYXNzIDIg
|
1221 |
-
Q2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDQwNjI5MTczOTE2WhcNMzQwNjI5MTczOTE2WjBo
|
1222 |
-
MQswCQYDVQQGEwJVUzElMCMGA1UEChMcU3RhcmZpZWxkIFRlY2hub2xvZ2llcywgSW5jLjEyMDAG
|
1223 |
-
A1UECxMpU3RhcmZpZWxkIENsYXNzIDIgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggEgMA0GCSqG
|
1224 |
-
SIb3DQEBAQUAA4IBDQAwggEIAoIBAQC3Msj+6XGmBIWtDBFk385N78gDGIc/oav7PKaf8MOh2tTY
|
1225 |
-
bitTkPskpD6E8J7oX+zlJ0T1KKY/e97gKvDIr1MvnsoFAZMej2YcOadN+lq2cwQlZut3f+dZxkqZ
|
1226 |
-
JRRU6ybH838Z1TBwj6+wRir/resp7defqgSHo9T5iaU0X9tDkYI22WY8sbi5gv2cOj4QyDvvBmVm
|
1227 |
-
epsZGD3/cVE8MC5fvj13c7JdBmzDI1aaK4UmkhynArPkPw2vCHmCuDY96pzTNbO8acr1zJ3o/WSN
|
1228 |
-
F4Azbl5KXZnJHoe0nRrA1W4TNSNe35tfPe/W93bC6j67eA0cQmdrBNj41tpvi/JEoAGrAgEDo4HF
|
1229 |
-
MIHCMB0GA1UdDgQWBBS/X7fRzt0fhvRbVazc1xDCDqmI5zCBkgYDVR0jBIGKMIGHgBS/X7fRzt0f
|
1230 |
-
hvRbVazc1xDCDqmI56FspGowaDELMAkGA1UEBhMCVVMxJTAjBgNVBAoTHFN0YXJmaWVsZCBUZWNo
|
1231 |
-
bm9sb2dpZXMsIEluYy4xMjAwBgNVBAsTKVN0YXJmaWVsZCBDbGFzcyAyIENlcnRpZmljYXRpb24g
|
1232 |
-
QXV0aG9yaXR5ggEAMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBAAWdP4id0ckaVaGs
|
1233 |
-
afPzWdqbAYcaT1epoXkJKtv3L7IezMdeatiDh6GX70k1PncGQVhiv45YuApnP+yz3SFmH8lU+nLM
|
1234 |
-
PUxA2IGvd56Deruix/U0F47ZEUD0/CwqTRV/p2JdLiXTAAsgGh1o+Re49L2L7ShZ3U0WixeDyLJl
|
1235 |
-
xy16paq8U4Zt3VekyvggQQto8PT7dL5WXXp59fkdheMtlb71cZBDzI0fmgAKhynpVSJYACPq4xJD
|
1236 |
-
KVtHCN2MQWplBqjlIapBtJUhlbl90TSrE9atvNziPTnNvT51cKEYWQPJIrSPnNVeKtelttQKbfi3
|
1237 |
-
QBFGmh95DmK/D5fs4C8fF5Q=
|
1238 |
-
-----END CERTIFICATE-----
|
1239 |
-
|
1240 |
-
Taiwan GRCA
|
1241 |
-
===========
|
1242 |
-
-----BEGIN CERTIFICATE-----
|
1243 |
-
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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-
O9NAOueNXdpm5AKwB1KYXA6OM5zCppX7VRluTI6uSw+9wThNXo+EHWbNxWCWtFJaBYmOlXqYwZE8
|
1256 |
-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
-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
-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
-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
-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
-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
-
D7gsL0u8qV1bYH+Mh6XgUmMqvtg7hUAV/h62ZT/FS9p+tXo1KaMuephgIqP0fSdOLeq0dDzpD6Qz
|
1263 |
-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
-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
-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
-
CZBUkQM8R+XVyWXgt0t97EfTsws+rZ7QdAAO671RrcDeLMDDav7v3Aun+kbfYNucpllQdSNpc5Oy
|
1267 |
-
+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
|
1268 |
-
-----END CERTIFICATE-----
|
1269 |
-
|
1270 |
-
DigiCert Assured ID Root CA
|
1271 |
-
===========================
|
1272 |
-
-----BEGIN CERTIFICATE-----
|
1273 |
-
MIIDtzCCAp+gAwIBAgIQDOfg5RfYRv6P5WD8G/AwOTANBgkqhkiG9w0BAQUFADBlMQswCQYDVQQG
|
1274 |
-
EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSQw
|
1275 |
-
IgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgQ0EwHhcNMDYxMTEwMDAwMDAwWhcNMzEx
|
1276 |
-
MTEwMDAwMDAwWjBlMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQL
|
1277 |
-
ExB3d3cuZGlnaWNlcnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgQ0Ew
|
1278 |
-
ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCtDhXO5EOAXLGH87dg+XESpa7cJpSIqvTO
|
1279 |
-
9SA5KFhgDPiA2qkVlTJhPLWxKISKityfCgyDF3qPkKyK53lTXDGEKvYPmDI2dsze3Tyoou9q+yHy
|
1280 |
-
UmHfnyDXH+Kx2f4YZNISW1/5WBg1vEfNoTb5a3/UsDg+wRvDjDPZ2C8Y/igPs6eD1sNuRMBhNZYW
|
1281 |
-
/lmci3Zt1/GiSw0r/wty2p5g0I6QNcZ4VYcgoc/lbQrISXwxmDNsIumH0DJaoroTghHtORedmTpy
|
1282 |
-
oeb6pNnVFzF1roV9Iq4/AUaG9ih5yLHa5FcXxH4cDrC0kqZWs72yl+2qp/C3xag/lRbQ/6GW6whf
|
1283 |
-
GHdPAgMBAAGjYzBhMA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRF
|
1284 |
-
66Kv9JLLgjEtUYunpyGd823IDzAfBgNVHSMEGDAWgBRF66Kv9JLLgjEtUYunpyGd823IDzANBgkq
|
1285 |
-
hkiG9w0BAQUFAAOCAQEAog683+Lt8ONyc3pklL/3cmbYMuRCdWKuh+vy1dneVrOfzM4UKLkNl2Bc
|
1286 |
-
EkxY5NM9g0lFWJc1aRqoR+pWxnmrEthngYTffwk8lOa4JiwgvT2zKIn3X/8i4peEH+ll74fg38Fn
|
1287 |
-
SbNd67IJKusm7Xi+fT8r87cmNW1fiQG2SVufAQWbqz0lwcy2f8Lxb4bG+mRo64EtlOtCt/qMHt1i
|
1288 |
-
8b5QZ7dsvfPxH2sMNgcWfzd8qVttevESRmCD1ycEvkvOl77DZypoEd+A5wwzZr8TDRRu838fYxAe
|
1289 |
-
+o0bJW1sj6W3YQGx0qMmoRBxna3iw/nDmVG3KwcIzi7mULKn+gpFL6Lw8g==
|
1290 |
-
-----END CERTIFICATE-----
|
1291 |
-
|
1292 |
-
DigiCert Global Root CA
|
1293 |
-
=======================
|
1294 |
-
-----BEGIN CERTIFICATE-----
|
1295 |
-
MIIDrzCCApegAwIBAgIQCDvgVpBCRrGhdWrJWZHHSjANBgkqhkiG9w0BAQUFADBhMQswCQYDVQQG
|
1296 |
-
EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSAw
|
1297 |
-
HgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBDQTAeFw0wNjExMTAwMDAwMDBaFw0zMTExMTAw
|
1298 |
-
MDAwMDBaMGExCzAJBgNVBAYTAlVTMRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3
|
1299 |
-
dy5kaWdpY2VydC5jb20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IENBMIIBIjANBgkq
|
1300 |
-
hkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4jvhEXLeqKTTo1eqUKKPC3eQyaKl7hLOllsBCSDMAZOn
|
1301 |
-
TjC3U/dDxGkAV53ijSLdhwZAAIEJzs4bg7/fzTtxRuLWZscFs3YnFo97nh6Vfe63SKMI2tavegw5
|
1302 |
-
BmV/Sl0fvBf4q77uKNd0f3p4mVmFaG5cIzJLv07A6Fpt43C/dxC//AH2hdmoRBBYMql1GNXRor5H
|
1303 |
-
4idq9Joz+EkIYIvUX7Q6hL+hqkpMfT7PT19sdl6gSzeRntwi5m3OFBqOasv+zbMUZBfHWymeMr/y
|
1304 |
-
7vrTC0LUq7dBMtoM1O/4gdW7jVg/tRvoSSiicNoxBN33shbyTApOB6jtSj1etX+jkMOvJwIDAQAB
|
1305 |
-
o2MwYTAOBgNVHQ8BAf8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUA95QNVbRTLtm
|
1306 |
-
8KPiGxvDl7I90VUwHwYDVR0jBBgwFoAUA95QNVbRTLtm8KPiGxvDl7I90VUwDQYJKoZIhvcNAQEF
|
1307 |
-
BQADggEBAMucN6pIExIK+t1EnE9SsPTfrgT1eXkIoyQY/EsrhMAtudXH/vTBH1jLuG2cenTnmCmr
|
1308 |
-
EbXjcKChzUyImZOMkXDiqw8cvpOp/2PV5Adg06O/nVsJ8dWO41P0jmP6P6fbtGbfYmbW0W5BjfIt
|
1309 |
-
tep3Sp+dWOIrWcBAI+0tKIJFPnlUkiaY4IBIqDfv8NZ5YBberOgOzW6sRBc4L0na4UU+Krk2U886
|
1310 |
-
UAb3LujEV0lsYSEY1QSteDwsOoBrp+uvFRTp2InBuThs4pFsiv9kuXclVzDAGySj4dzp30d8tbQk
|
1311 |
-
CAUw7C29C79Fv1C5qfPrmAESrciIxpg0X40KPMbp1ZWVbd4=
|
1312 |
-
-----END CERTIFICATE-----
|
1313 |
-
|
1314 |
-
DigiCert High Assurance EV Root CA
|
1315 |
-
==================================
|
1316 |
-
-----BEGIN CERTIFICATE-----
|
1317 |
-
MIIDxTCCAq2gAwIBAgIQAqxcJmoLQJuPC3nyrkYldzANBgkqhkiG9w0BAQUFADBsMQswCQYDVQQG
|
1318 |
-
EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSsw
|
1319 |
-
KQYDVQQDEyJEaWdpQ2VydCBIaWdoIEFzc3VyYW5jZSBFViBSb290IENBMB4XDTA2MTExMDAwMDAw
|
1320 |
-
MFoXDTMxMTExMDAwMDAwMFowbDELMAkGA1UEBhMCVVMxFTATBgNVBAoTDERpZ2lDZXJ0IEluYzEZ
|
1321 |
-
MBcGA1UECxMQd3d3LmRpZ2ljZXJ0LmNvbTErMCkGA1UEAxMiRGlnaUNlcnQgSGlnaCBBc3N1cmFu
|
1322 |
-
Y2UgRVYgUm9vdCBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMbM5XPm+9S75S0t
|
1323 |
-
Mqbf5YE/yc0lSbZxKsPVlDRnogocsF9ppkCxxLeyj9CYpKlBWTrT3JTWPNt0OKRKzE0lgvdKpVMS
|
1324 |
-
OO7zSW1xkX5jtqumX8OkhPhPYlG++MXs2ziS4wblCJEMxChBVfvLWokVfnHoNb9Ncgk9vjo4UFt3
|
1325 |
-
MRuNs8ckRZqnrG0AFFoEt7oT61EKmEFBIk5lYYeBQVCmeVyJ3hlKV9Uu5l0cUyx+mM0aBhakaHPQ
|
1326 |
-
NAQTXKFx01p8VdteZOE3hzBWBOURtCmAEvF5OYiiAhF8J2a3iLd48soKqDirCmTCv2ZdlYTBoSUe
|
1327 |
-
h10aUAsgEsxBu24LUTi4S8sCAwEAAaNjMGEwDgYDVR0PAQH/BAQDAgGGMA8GA1UdEwEB/wQFMAMB
|
1328 |
-
Af8wHQYDVR0OBBYEFLE+w2kD+L9HAdSYJhoIAu9jZCvDMB8GA1UdIwQYMBaAFLE+w2kD+L9HAdSY
|
1329 |
-
JhoIAu9jZCvDMA0GCSqGSIb3DQEBBQUAA4IBAQAcGgaX3NecnzyIZgYIVyHbIUf4KmeqvxgydkAQ
|
1330 |
-
V8GK83rZEWWONfqe/EW1ntlMMUu4kehDLI6zeM7b41N5cdblIZQB2lWHmiRk9opmzN6cN82oNLFp
|
1331 |
-
myPInngiK3BD41VHMWEZ71jFhS9OMPagMRYjyOfiZRYzy78aG6A9+MpeizGLYAiJLQwGXFK3xPkK
|
1332 |
-
mNEVX58Svnw2Yzi9RKR/5CYrCsSXaQ3pjOLAEFe4yHYSkVXySGnYvCoCWw9E1CAx2/S6cCZdkGCe
|
1333 |
-
vEsXCS+0yx5DaMkHJ8HSXPfqIbloEpw8nL+e/IBcm2PN7EeqJSdnoDfzAIJ9VNep+OkuE6N36B9K
|
1334 |
-
-----END CERTIFICATE-----
|
1335 |
-
|
1336 |
-
Certplus Class 2 Primary CA
|
1337 |
-
===========================
|
1338 |
-
-----BEGIN CERTIFICATE-----
|
1339 |
-
MIIDkjCCAnqgAwIBAgIRAIW9S/PY2uNp9pTXX8OlRCMwDQYJKoZIhvcNAQEFBQAwPTELMAkGA1UE
|
1340 |
-
BhMCRlIxETAPBgNVBAoTCENlcnRwbHVzMRswGQYDVQQDExJDbGFzcyAyIFByaW1hcnkgQ0EwHhcN
|
1341 |
-
OTkwNzA3MTcwNTAwWhcNMTkwNzA2MjM1OTU5WjA9MQswCQYDVQQGEwJGUjERMA8GA1UEChMIQ2Vy
|
1342 |
-
dHBsdXMxGzAZBgNVBAMTEkNsYXNzIDIgUHJpbWFyeSBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEP
|
1343 |
-
ADCCAQoCggEBANxQltAS+DXSCHh6tlJw/W/uz7kRy1134ezpfgSN1sxvc0NXYKwzCkTsA18cgCSR
|
1344 |
-
5aiRVhKC9+Ar9NuuYS6JEI1rbLqzAr3VNsVINyPi8Fo3UjMXEuLRYE2+L0ER4/YXJQyLkcAbmXuZ
|
1345 |
-
Vg2v7tK8R1fjeUl7NIknJITesezpWE7+Tt9avkGtrAjFGA7v0lPubNCdEgETjdyAYveVqUSISnFO
|
1346 |
-
YFWe2yMZeVYHDD9jC1yw4r5+FfyUM1hBOHTE4Y+L3yasH7WLO7dDWWuwJKZtkIvEcupdM5i3y95e
|
1347 |
-
e++U8Rs+yskhwcWYAqqi9lt3m/V+llU0HGdpwPFC40es/CgcZlUCAwEAAaOBjDCBiTAPBgNVHRME
|
1348 |
-
CDAGAQH/AgEKMAsGA1UdDwQEAwIBBjAdBgNVHQ4EFgQU43Mt38sOKAze3bOkynm4jrvoMIkwEQYJ
|
1349 |
-
YIZIAYb4QgEBBAQDAgEGMDcGA1UdHwQwMC4wLKAqoCiGJmh0dHA6Ly93d3cuY2VydHBsdXMuY29t
|
1350 |
-
L0NSTC9jbGFzczIuY3JsMA0GCSqGSIb3DQEBBQUAA4IBAQCnVM+IRBnL39R/AN9WM2K191EBkOvD
|
1351 |
-
P9GIROkkXe/nFL0gt5o8AP5tn9uQ3Nf0YtaLcF3n5QRIqWh8yfFC82x/xXp8HVGIutIKPidd3i1R
|
1352 |
-
TtMTZGnkLuPT55sJmabglZvOGtd/vjzOUrMRFcEPF80Du5wlFbqidon8BvEY0JNLDnyCt6X09l/+
|
1353 |
-
7UCmnYR0ObncHoUW2ikbhiMAybuJfm6AiB4vFLQDJKgybwOaRywwvlbGp0ICcBvqQNi6BQNwB6SW
|
1354 |
-
//1IMwrh3KWBkJtN3X3n57LNXMhqlfil9o3EXXgIvnsG1knPGTZQIy4I5p4FTUcY1Rbpsda2ENW7
|
1355 |
-
l7+ijrRU
|
1356 |
-
-----END CERTIFICATE-----
|
1357 |
-
|
1358 |
-
DST Root CA X3
|
1359 |
-
==============
|
1360 |
-
-----BEGIN CERTIFICATE-----
|
1361 |
-
MIIDSjCCAjKgAwIBAgIQRK+wgNajJ7qJMDmGLvhAazANBgkqhkiG9w0BAQUFADA/MSQwIgYDVQQK
|
1362 |
-
ExtEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdCBDby4xFzAVBgNVBAMTDkRTVCBSb290IENBIFgzMB4X
|
1363 |
-
DTAwMDkzMDIxMTIxOVoXDTIxMDkzMDE0MDExNVowPzEkMCIGA1UEChMbRGlnaXRhbCBTaWduYXR1
|
1364 |
-
cmUgVHJ1c3QgQ28uMRcwFQYDVQQDEw5EU1QgUm9vdCBDQSBYMzCCASIwDQYJKoZIhvcNAQEBBQAD
|
1365 |
-
ggEPADCCAQoCggEBAN+v6ZdQCINXtMxiZfaQguzH0yxrMMpb7NnDfcdAwRgUi+DoM3ZJKuM/IUmT
|
1366 |
-
rE4Orz5Iy2Xu/NMhD2XSKtkyj4zl93ewEnu1lcCJo6m67XMuegwGMoOifooUMM0RoOEqOLl5CjH9
|
1367 |
-
UL2AZd+3UWODyOKIYepLYYHsUmu5ouJLGiifSKOeDNoJjj4XLh7dIN9bxiqKqy69cK3FCxolkHRy
|
1368 |
-
xXtqqzTWMIn/5WgTe1QLyNau7Fqckh49ZLOMxt+/yUFw7BZy1SbsOFU5Q9D8/RhcQPGX69Wam40d
|
1369 |
-
utolucbY38EVAjqr2m7xPi71XAicPNaDaeQQmxkqtilX4+U9m5/wAl0CAwEAAaNCMEAwDwYDVR0T
|
1370 |
-
AQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFMSnsaR7LHH62+FLkHX/xBVghYkQ
|
1371 |
-
MA0GCSqGSIb3DQEBBQUAA4IBAQCjGiybFwBcqR7uKGY3Or+Dxz9LwwmglSBd49lZRNI+DT69ikug
|
1372 |
-
dB/OEIKcdBodfpga3csTS7MgROSR6cz8faXbauX+5v3gTt23ADq1cEmv8uXrAvHRAosZy5Q6XkjE
|
1373 |
-
GB5YGV8eAlrwDPGxrancWYaLbumR9YbK+rlmM6pZW87ipxZzR8srzJmwN0jP41ZL9c8PDHIyh8bw
|
1374 |
-
RLtTcm1D9SZImlJnt1ir/md2cXjbDaJWFBM5JDGFoqgCWjBH4d1QB7wCCZAA62RjYJsWvIjJEubS
|
1375 |
-
fZGL+T0yjWW06XyxV3bqxbYoOb8VZRzI9neWagqNdwvYkQsEjgfbKbYK7p2CNTUQ
|
1376 |
-
-----END CERTIFICATE-----
|
1377 |
-
|
1378 |
-
SwissSign Gold CA - G2
|
1379 |
-
======================
|
1380 |
-
-----BEGIN CERTIFICATE-----
|
1381 |
-
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
-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
-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
-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
-
AQEFAAOCAg8AMIICCgKCAgEAr+TufoskDhJuqVAtFkQ7kpJcyrhdhJJCEyq8ZVeCQD5XJM1QiyUq
|
1386 |
-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
-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
-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
-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
-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
-
jIj3o02yMszYF9rNt85mndT9Xv+9lz4pded+p2JYryU0pUHHPbwNUMoDAw8IWh+Vc3hiv69yFGkO
|
1392 |
-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
-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
-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
-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
-
OfPAeGZe6Drn8O4wRgYDVR0gBD8wPTA7BglghXQBWQECAQEwLjAsBggrBgEFBQcCARYgaHR0cDov
|
1397 |
-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
-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
-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
-
Mke6UiI0HTJ6CVanfCU2qT1L2sCCbwq7EsiHSycR+R4tx5M/nttfJmtS2S6K8RTGRI0Vqbe/vd6m
|
1401 |
-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
-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
-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
-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
-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
-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
|
1407 |
-
-----END CERTIFICATE-----
|
1408 |
-
|
1409 |
-
SwissSign Silver CA - G2
|
1410 |
-
========================
|
1411 |
-
-----BEGIN CERTIFICATE-----
|
1412 |
-
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
-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
-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
-
aXNzU2lnbiBBRzEhMB8GA1UEAxMYU3dpc3NTaWduIFNpbHZlciBDQSAtIEcyMIICIjANBgkqhkiG
|
1416 |
-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
-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
-
+/pe7R20nqA1W6GSy/BJkv6FCgU+5tkL4k+73JU3/JHpMjUi0R86TieFnbAVlDLaYQ1HTWBCrpJH
|
1419 |
-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
-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
-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
-
FZGkECwJMoBgs5PAKrYYC51+jUnyEEp/+dVGLxmSo5mnJqy7jDzmDrxHB9xzUfFwZC8I+bRHHTBs
|
1423 |
-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
-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
-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
-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
-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
-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
-
4JUw4ppBf1AsX19iYamGamkYDHRJ1l2E6kFSGG9YrVBWIGrGvShpWJHckRE1qTodvBqlYJ7YH39F
|
1430 |
-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
-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
-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
-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
-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
-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
-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
-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
|
1438 |
-
-----END CERTIFICATE-----
|
1439 |
-
|
1440 |
-
GeoTrust Primary Certification Authority
|
1441 |
-
========================================
|
1442 |
-
-----BEGIN CERTIFICATE-----
|
1443 |
-
MIIDfDCCAmSgAwIBAgIQGKy1av1pthU6Y2yv2vrEoTANBgkqhkiG9w0BAQUFADBYMQswCQYDVQQG
|
1444 |
-
EwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjExMC8GA1UEAxMoR2VvVHJ1c3QgUHJpbWFyeSBD
|
1445 |
-
ZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wNjExMjcwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMFgx
|
1446 |
-
CzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMTEwLwYDVQQDEyhHZW9UcnVzdCBQ
|
1447 |
-
cmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB
|
1448 |
-
CgKCAQEAvrgVe//UfH1nrYNke8hCUy3f9oQIIGHWAVlqnEQRr+92/ZV+zmEwu3qDXwK9AWbK7hWN
|
1449 |
-
b6EwnL2hhZ6UOvNWiAAxz9juapYC2e0DjPt1befquFUWBRaa9OBesYjAZIVcFU2Ix7e64HXprQU9
|
1450 |
-
nceJSOC7KMgD4TCTZF5SwFlwIjVXiIrxlQqD17wxcwE07e9GceBrAqg1cmuXm2bgyxx5X9gaBGge
|
1451 |
-
RwLmnWDiNpcB3841kt++Z8dtd1k7j53WkBWUvEI0EME5+bEnPn7WinXFsq+W06Lem+SYvn3h6YGt
|
1452 |
-
tm/81w7a4DSwDRp35+MImO9Y+pyEtzavwt+s0vQQBnBxNQIDAQABo0IwQDAPBgNVHRMBAf8EBTAD
|
1453 |
-
AQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQULNVQQZcVi/CPNmFbSvtr2ZnJM5IwDQYJKoZI
|
1454 |
-
hvcNAQEFBQADggEBAFpwfyzdtzRP9YZRqSa+S7iq8XEN3GHHoOo0Hnp3DwQ16CePbJC/kRYkRj5K
|
1455 |
-
Ts4rFtULUh38H2eiAkUxT87z+gOneZ1TatnaYzr4gNfTmeGl4b7UVXGYNTq+k+qurUKykG/g/CFN
|
1456 |
-
NWMziUnWm07Kx+dOCQD32sfvmWKZd7aVIl6KoKv0uHiYyjgZmclynnjNS6yvGaBzEi38wkG6gZHa
|
1457 |
-
Floxt/m0cYASSJlyc1pZU8FjUjPtp8nSOQJw+uCxQmYpqptR7TBUIhRf2asdweSU8Pj1K/fqynhG
|
1458 |
-
1riR/aYNKxoUAT6A8EKglQdebc3MS6RFjasS6LPeWuWgfOgPIh1a6Vk=
|
1459 |
-
-----END CERTIFICATE-----
|
1460 |
-
|
1461 |
-
thawte Primary Root CA
|
1462 |
-
======================
|
1463 |
-
-----BEGIN CERTIFICATE-----
|
1464 |
-
MIIEIDCCAwigAwIBAgIQNE7VVyDV7exJ9C/ON9srbTANBgkqhkiG9w0BAQUFADCBqTELMAkGA1UE
|
1465 |
-
BhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5jLjEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2
|
1466 |
-
aWNlcyBEaXZpc2lvbjE4MDYGA1UECxMvKGMpIDIwMDYgdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhv
|
1467 |
-
cml6ZWQgdXNlIG9ubHkxHzAdBgNVBAMTFnRoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EwHhcNMDYxMTE3
|
1468 |
-
MDAwMDAwWhcNMzYwNzE2MjM1OTU5WjCBqTELMAkGA1UEBhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwg
|
1469 |
-
SW5jLjEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjE4MDYGA1UECxMv
|
1470 |
-
KGMpIDIwMDYgdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxHzAdBgNVBAMT
|
1471 |
-
FnRoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCs
|
1472 |
-
oPD7gFnUnMekz52hWXMJEEUMDSxuaPFsW0hoSVk3/AszGcJ3f8wQLZU0HObrTQmnHNK4yZc2AreJ
|
1473 |
-
1CRfBsDMRJSUjQJib+ta3RGNKJpchJAQeg29dGYvajig4tVUROsdB58Hum/u6f1OCyn1PoSgAfGc
|
1474 |
-
q/gcfomk6KHYcWUNo1F77rzSImANuVud37r8UVsLr5iy6S7pBOhih94ryNdOwUxkHt3Ph1i6Sk/K
|
1475 |
-
aAcdHJ1KxtUvkcx8cXIcxcBn6zL9yZJclNqFwJu/U30rCfSMnZEfl2pSy94JNqR32HuHUETVPm4p
|
1476 |
-
afs5SSYeCaWAe0At6+gnhcn+Yf1+5nyXHdWdAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYD
|
1477 |
-
VR0PAQH/BAQDAgEGMB0GA1UdDgQWBBR7W0XPr87Lev0xkhpqtvNG61dIUDANBgkqhkiG9w0BAQUF
|
1478 |
-
AAOCAQEAeRHAS7ORtvzw6WfUDW5FvlXok9LOAz/t2iWwHVfLHjp2oEzsUHboZHIMpKnxuIvW1oeE
|
1479 |
-
uzLlQRHAd9mzYJ3rG9XRbkREqaYB7FViHXe4XI5ISXycO1cRrK1zN44veFyQaEfZYGDm/Ac9IiAX
|
1480 |
-
xPcW6cTYcvnIc3zfFi8VqT79aie2oetaupgf1eNNZAqdE8hhuvU5HIe6uL17In/2/qxAeeWsEG89
|
1481 |
-
jxt5dovEN7MhGITlNgDrYyCZuen+MwS7QcjBAvlEYyCegc5C09Y/LHbTY5xZ3Y+m4Q6gLkH3LpVH
|
1482 |
-
z7z9M/P2C2F+fpErgUfCJzDupxBdN49cOSvkBPB7jVaMaA==
|
1483 |
-
-----END CERTIFICATE-----
|
1484 |
-
|
1485 |
-
VeriSign Class 3 Public Primary Certification Authority - G5
|
1486 |
-
============================================================
|
1487 |
-
-----BEGIN CERTIFICATE-----
|
1488 |
-
MIIE0zCCA7ugAwIBAgIQGNrRniZ96LtKIVjNzGs7SjANBgkqhkiG9w0BAQUFADCByjELMAkGA1UE
|
1489 |
-
BhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBO
|
1490 |
-
ZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNiBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVk
|
1491 |
-
IHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRp
|
1492 |
-
ZmljYXRpb24gQXV0aG9yaXR5IC0gRzUwHhcNMDYxMTA4MDAwMDAwWhcNMzYwNzE2MjM1OTU5WjCB
|
1493 |
-
yjELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2ln
|
1494 |
-
biBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNiBWZXJpU2lnbiwgSW5jLiAtIEZvciBh
|
1495 |
-
dXRob3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmlt
|
1496 |
-
YXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IC0gRzUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAw
|
1497 |
-
ggEKAoIBAQCvJAgIKXo1nmAMqudLO07cfLw8RRy7K+D+KQL5VwijZIUVJ/XxrcgxiV0i6CqqpkKz
|
1498 |
-
j/i5Vbext0uz/o9+B1fs70PbZmIVYc9gDaTY3vjgw2IIPVQT60nKWVSFJuUrjxuf6/WhkcIzSdhD
|
1499 |
-
Y2pSS9KP6HBRTdGJaXvHcPaz3BJ023tdS1bTlr8Vd6Gw9KIl8q8ckmcY5fQGBO+QueQA5N06tRn/
|
1500 |
-
Arr0PO7gi+s3i+z016zy9vA9r911kTMZHRxAy3QkGSGT2RT+rCpSx4/VBEnkjWNHiDxpg8v+R70r
|
1501 |
-
fk/Fla4OndTRQ8Bnc+MUCH7lP59zuDMKz10/NIeWiu5T6CUVAgMBAAGjgbIwga8wDwYDVR0TAQH/
|
1502 |
-
BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwbQYIKwYBBQUHAQwEYTBfoV2gWzBZMFcwVRYJaW1hZ2Uv
|
1503 |
-
Z2lmMCEwHzAHBgUrDgMCGgQUj+XTGoasjY5rw8+AatRIGCx7GS4wJRYjaHR0cDovL2xvZ28udmVy
|
1504 |
-
aXNpZ24uY29tL3ZzbG9nby5naWYwHQYDVR0OBBYEFH/TZafC3ey78DAJ80M5+gKvMzEzMA0GCSqG
|
1505 |
-
SIb3DQEBBQUAA4IBAQCTJEowX2LP2BqYLz3q3JktvXf2pXkiOOzEp6B4Eq1iDkVwZMXnl2YtmAl+
|
1506 |
-
X6/WzChl8gGqCBpH3vn5fJJaCGkgDdk+bW48DW7Y5gaRQBi5+MHt39tBquCWIMnNZBU4gcmU7qKE
|
1507 |
-
KQsTb47bDN0lAtukixlE0kF6BWlKWE9gyn6CagsCqiUXObXbf+eEZSqVir2G3l6BFoMtEMze/aiC
|
1508 |
-
Km0oHw0LxOXnGiYZ4fQRbxC1lfznQgUy286dUV4otp6F01vvpX1FQHKOtw5rDgb7MzVIcbidJ4vE
|
1509 |
-
ZV8NhnacRHr2lVz2XTIIM6RUthg/aFzyQkqFOFSDX9HoLPKsEdao7WNq
|
1510 |
-
-----END CERTIFICATE-----
|
1511 |
-
|
1512 |
-
SecureTrust CA
|
1513 |
-
==============
|
1514 |
-
-----BEGIN CERTIFICATE-----
|
1515 |
-
MIIDuDCCAqCgAwIBAgIQDPCOXAgWpa1Cf/DrJxhZ0DANBgkqhkiG9w0BAQUFADBIMQswCQYDVQQG
|
1516 |
-
EwJVUzEgMB4GA1UEChMXU2VjdXJlVHJ1c3QgQ29ycG9yYXRpb24xFzAVBgNVBAMTDlNlY3VyZVRy
|
1517 |
-
dXN0IENBMB4XDTA2MTEwNzE5MzExOFoXDTI5MTIzMTE5NDA1NVowSDELMAkGA1UEBhMCVVMxIDAe
|
1518 |
-
BgNVBAoTF1NlY3VyZVRydXN0IENvcnBvcmF0aW9uMRcwFQYDVQQDEw5TZWN1cmVUcnVzdCBDQTCC
|
1519 |
-
ASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKukgeWVzfX2FI7CT8rU4niVWJxB4Q2ZQCQX
|
1520 |
-
OZEzZum+4YOvYlyJ0fwkW2Gz4BERQRwdbvC4u/jep4G6pkjGnx29vo6pQT64lO0pGtSO0gMdA+9t
|
1521 |
-
DWccV9cGrcrI9f4Or2YlSASWC12juhbDCE/RRvgUXPLIXgGZbf2IzIaowW8xQmxSPmjL8xk037uH
|
1522 |
-
GFaAJsTQ3MBv396gwpEWoGQRS0S8Hvbn+mPeZqx2pHGj7DaUaHp3pLHnDi+BeuK1cobvomuL8A/b
|
1523 |
-
01k/unK8RCSc43Oz969XL0Imnal0ugBS8kvNU3xHCzaFDmapCJcWNFfBZveA4+1wVMeT4C4oFVmH
|
1524 |
-
ursCAwEAAaOBnTCBmjATBgkrBgEEAYI3FAIEBh4EAEMAQTALBgNVHQ8EBAMCAYYwDwYDVR0TAQH/
|
1525 |
-
BAUwAwEB/zAdBgNVHQ4EFgQUQjK2FvoE/f5dS3rD/fdMQB1aQ68wNAYDVR0fBC0wKzApoCegJYYj
|
1526 |
-
aHR0cDovL2NybC5zZWN1cmV0cnVzdC5jb20vU1RDQS5jcmwwEAYJKwYBBAGCNxUBBAMCAQAwDQYJ
|
1527 |
-
KoZIhvcNAQEFBQADggEBADDtT0rhWDpSclu1pqNlGKa7UTt36Z3q059c4EVlew3KW+JwULKUBRSu
|
1528 |
-
SceNQQcSc5R+DCMh/bwQf2AQWnL1mA6s7Ll/3XpvXdMc9P+IBWlCqQVxyLesJugutIxq/3HcuLHf
|
1529 |
-
mbx8IVQr5Fiiu1cprp6poxkmD5kuCLDv/WnPmRoJjeOnnyvJNjR7JLN4TJUXpAYmHrZkUjZfYGfZ
|
1530 |
-
nMUFdAvnZyPSCPyI6a6Lf+Ew9Dd+/cYy2i2eRDAwbO4H3tI0/NL/QPZL9GZGBlSm8jIKYyYwa5vR
|
1531 |
-
3ItHuuG51WLQoqD0ZwV4KWMabwTW+MZMo5qxN7SN5ShLHZ4swrhovO0C7jE=
|
1532 |
-
-----END CERTIFICATE-----
|
1533 |
-
|
1534 |
-
Secure Global CA
|
1535 |
-
================
|
1536 |
-
-----BEGIN CERTIFICATE-----
|
1537 |
-
MIIDvDCCAqSgAwIBAgIQB1YipOjUiolN9BPI8PjqpTANBgkqhkiG9w0BAQUFADBKMQswCQYDVQQG
|
1538 |
-
EwJVUzEgMB4GA1UEChMXU2VjdXJlVHJ1c3QgQ29ycG9yYXRpb24xGTAXBgNVBAMTEFNlY3VyZSBH
|
1539 |
-
bG9iYWwgQ0EwHhcNMDYxMTA3MTk0MjI4WhcNMjkxMjMxMTk1MjA2WjBKMQswCQYDVQQGEwJVUzEg
|
1540 |
-
MB4GA1UEChMXU2VjdXJlVHJ1c3QgQ29ycG9yYXRpb24xGTAXBgNVBAMTEFNlY3VyZSBHbG9iYWwg
|
1541 |
-
Q0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCvNS7YrGxVaQZx5RNoJLNP2MwhR/jx
|
1542 |
-
YDiJiQPpvepeRlMJ3Fz1Wuj3RSoC6zFh1ykzTM7HfAo3fg+6MpjhHZevj8fcyTiW89sa/FHtaMbQ
|
1543 |
-
bqR8JNGuQsiWUGMu4P51/pinX0kuleM5M2SOHqRfkNJnPLLZ/kG5VacJjnIFHovdRIWCQtBJwB1g
|
1544 |
-
8NEXLJXr9qXBkqPFwqcIYA1gBBCWeZ4WNOaptvolRTnIHmX5k/Wq8VLcmZg9pYYaDDUz+kulBAYV
|
1545 |
-
HDGA76oYa8J719rO+TMg1fW9ajMtgQT7sFzUnKPiXB3jqUJ1XnvUd+85VLrJChgbEplJL4hL/VBi
|
1546 |
-
0XPnj3pDAgMBAAGjgZ0wgZowEwYJKwYBBAGCNxQCBAYeBABDAEEwCwYDVR0PBAQDAgGGMA8GA1Ud
|
1547 |
-
EwEB/wQFMAMBAf8wHQYDVR0OBBYEFK9EBMJBfkiD2045AuzshHrmzsmkMDQGA1UdHwQtMCswKaAn
|
1548 |
-
oCWGI2h0dHA6Ly9jcmwuc2VjdXJldHJ1c3QuY29tL1NHQ0EuY3JsMBAGCSsGAQQBgjcVAQQDAgEA
|
1549 |
-
MA0GCSqGSIb3DQEBBQUAA4IBAQBjGghAfaReUw132HquHw0LURYD7xh8yOOvaliTFGCRsoTciE6+
|
1550 |
-
OYo68+aCiV0BN7OrJKQVDpI1WkpEXk5X+nXOH0jOZvQ8QCaSmGwb7iRGDBezUqXbpZGRzzfTb+cn
|
1551 |
-
CDpOGR86p1hcF895P4vkp9MmI50mD1hp/Ed+stCNi5O/KU9DaXR2Z0vPB4zmAve14bRDtUstFJ/5
|
1552 |
-
3CYNv6ZHdAbYiNE6KTCEztI5gGIbqMdXSbxqVVFnFUq+NQfk1XWYN3kwFNspnWzFacxHVaIw98xc
|
1553 |
-
f8LDmBxrThaA63p4ZUWiABqvDA1VZDRIuJK58bRQKfJPIx/abKwfROHdI3hRW8cW
|
1554 |
-
-----END CERTIFICATE-----
|
1555 |
-
|
1556 |
-
COMODO Certification Authority
|
1557 |
-
==============================
|
1558 |
-
-----BEGIN CERTIFICATE-----
|
1559 |
-
MIIEHTCCAwWgAwIBAgIQToEtioJl4AsC7j41AkblPTANBgkqhkiG9w0BAQUFADCBgTELMAkGA1UE
|
1560 |
-
BhMCR0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgG
|
1561 |
-
A1UEChMRQ09NT0RPIENBIExpbWl0ZWQxJzAlBgNVBAMTHkNPTU9ETyBDZXJ0aWZpY2F0aW9uIEF1
|
1562 |
-
dGhvcml0eTAeFw0wNjEyMDEwMDAwMDBaFw0yOTEyMzEyMzU5NTlaMIGBMQswCQYDVQQGEwJHQjEb
|
1563 |
-
MBkGA1UECBMSR3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHEwdTYWxmb3JkMRowGAYDVQQKExFD
|
1564 |
-
T01PRE8gQ0EgTGltaXRlZDEnMCUGA1UEAxMeQ09NT0RPIENlcnRpZmljYXRpb24gQXV0aG9yaXR5
|
1565 |
-
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0ECLi3LjkRv3UcEbVASY06m/weaKXTuH
|
1566 |
-
+7uIzg3jLz8GlvCiKVCZrts7oVewdFFxze1CkU1B/qnI2GqGd0S7WWaXUF601CxwRM/aN5VCaTww
|
1567 |
-
xHGzUvAhTaHYujl8HJ6jJJ3ygxaYqhZ8Q5sVW7euNJH+1GImGEaaP+vB+fGQV+useg2L23IwambV
|
1568 |
-
4EajcNxo2f8ESIl33rXp+2dtQem8Ob0y2WIC8bGoPW43nOIv4tOiJovGuFVDiOEjPqXSJDlqR6sA
|
1569 |
-
1KGzqSX+DT+nHbrTUcELpNqsOO9VUCQFZUaTNE8tja3G1CEZ0o7KBWFxB3NH5YoZEr0ETc5OnKVI
|
1570 |
-
rLsm9wIDAQABo4GOMIGLMB0GA1UdDgQWBBQLWOWLxkwVN6RAqTCpIb5HNlpW/zAOBgNVHQ8BAf8E
|
1571 |
-
BAMCAQYwDwYDVR0TAQH/BAUwAwEB/zBJBgNVHR8EQjBAMD6gPKA6hjhodHRwOi8vY3JsLmNvbW9k
|
1572 |
-
b2NhLmNvbS9DT01PRE9DZXJ0aWZpY2F0aW9uQXV0aG9yaXR5LmNybDANBgkqhkiG9w0BAQUFAAOC
|
1573 |
-
AQEAPpiem/Yb6dc5t3iuHXIYSdOH5EOC6z/JqvWote9VfCFSZfnVDeFs9D6Mk3ORLgLETgdxb8CP
|
1574 |
-
OGEIqB6BCsAvIC9Bi5HcSEW88cbeunZrM8gALTFGTO3nnc+IlP8zwFboJIYmuNg4ON8qa90SzMc/
|
1575 |
-
RxdMosIGlgnW2/4/PEZB31jiVg88O8EckzXZOFKs7sjsLjBOlDW0JB9LeGna8gI4zJVSk/BwJVmc
|
1576 |
-
IGfE7vmLV2H0knZ9P4SNVbfo5azV8fUZVqZa+5Acr5Pr5RzUZ5ddBA6+C4OmF4O5MBKgxTMVBbkN
|
1577 |
-
+8cFduPYSo38NBejxiEovjBFMR7HeL5YYTisO+IBZQ==
|
1578 |
-
-----END CERTIFICATE-----
|
1579 |
-
|
1580 |
-
Network Solutions Certificate Authority
|
1581 |
-
=======================================
|
1582 |
-
-----BEGIN CERTIFICATE-----
|
1583 |
-
MIID5jCCAs6gAwIBAgIQV8szb8JcFuZHFhfjkDFo4DANBgkqhkiG9w0BAQUFADBiMQswCQYDVQQG
|
1584 |
-
EwJVUzEhMB8GA1UEChMYTmV0d29yayBTb2x1dGlvbnMgTC5MLkMuMTAwLgYDVQQDEydOZXR3b3Jr
|
1585 |
-
IFNvbHV0aW9ucyBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwHhcNMDYxMjAxMDAwMDAwWhcNMjkxMjMx
|
1586 |
-
MjM1OTU5WjBiMQswCQYDVQQGEwJVUzEhMB8GA1UEChMYTmV0d29yayBTb2x1dGlvbnMgTC5MLkMu
|
1587 |
-
MTAwLgYDVQQDEydOZXR3b3JrIFNvbHV0aW9ucyBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwggEiMA0G
|
1588 |
-
CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDkvH6SMG3G2I4rC7xGzuAnlt7e+foS0zwzc7MEL7xx
|
1589 |
-
jOWftiJgPl9dzgn/ggwbmlFQGiaJ3dVhXRncEg8tCqJDXRfQNJIg6nPPOCwGJgl6cvf6UDL4wpPT
|
1590 |
-
aaIjzkGxzOTVHzbRijr4jGPiFFlp7Q3Tf2vouAPlT2rlmGNpSAW+Lv8ztumXWWn4Zxmuk2GWRBXT
|
1591 |
-
crA/vGp97Eh/jcOrqnErU2lBUzS1sLnFBgrEsEX1QV1uiUV7PTsmjHTC5dLRfbIR1PtYMiKagMnc
|
1592 |
-
/Qzpf14Dl847ABSHJ3A4qY5usyd2mFHgBeMhqxrVhSI8KbWaFsWAqPS7azCPL0YCorEMIuDTAgMB
|
1593 |
-
AAGjgZcwgZQwHQYDVR0OBBYEFCEwyfsA106Y2oeqKtCnLrFAMadMMA4GA1UdDwEB/wQEAwIBBjAP
|
1594 |
-
BgNVHRMBAf8EBTADAQH/MFIGA1UdHwRLMEkwR6BFoEOGQWh0dHA6Ly9jcmwubmV0c29sc3NsLmNv
|
1595 |
-
bS9OZXR3b3JrU29sdXRpb25zQ2VydGlmaWNhdGVBdXRob3JpdHkuY3JsMA0GCSqGSIb3DQEBBQUA
|
1596 |
-
A4IBAQC7rkvnt1frf6ott3NHhWrB5KUd5Oc86fRZZXe1eltajSU24HqXLjjAV2CDmAaDn7l2em5Q
|
1597 |
-
4LqILPxFzBiwmZVRDuwduIj/h1AcgsLj4DKAv6ALR8jDMe+ZZzKATxcheQxpXN5eNK4CtSbqUN9/
|
1598 |
-
GGUsyfJj4akH/nxxH2szJGoeBfcFaMBqEssuXmHLrijTfsK0ZpEmXzwuJF/LWA/rKOyvEZbz3Htv
|
1599 |
-
wKeI8lN3s2Berq4o2jUsbzRF0ybh3uxbTydrFny9RAQYgrOJeRcQcT16ohZO9QHNpGxlaKFJdlxD
|
1600 |
-
ydi8NmdspZS11My5vWo1ViHe2MPr+8ukYEywVaCge1ey
|
1601 |
-
-----END CERTIFICATE-----
|
1602 |
-
|
1603 |
-
COMODO ECC Certification Authority
|
1604 |
-
==================================
|
1605 |
-
-----BEGIN CERTIFICATE-----
|
1606 |
-
MIICiTCCAg+gAwIBAgIQH0evqmIAcFBUTAGem2OZKjAKBggqhkjOPQQDAzCBhTELMAkGA1UEBhMC
|
1607 |
-
R0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgGA1UE
|
1608 |
-
ChMRQ09NT0RPIENBIExpbWl0ZWQxKzApBgNVBAMTIkNPTU9ETyBFQ0MgQ2VydGlmaWNhdGlvbiBB
|
1609 |
-
dXRob3JpdHkwHhcNMDgwMzA2MDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCBhTELMAkGA1UEBhMCR0Ix
|
1610 |
-
GzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgGA1UEChMR
|
1611 |
-
Q09NT0RPIENBIExpbWl0ZWQxKzApBgNVBAMTIkNPTU9ETyBFQ0MgQ2VydGlmaWNhdGlvbiBBdXRo
|
1612 |
-
b3JpdHkwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAAQDR3svdcmCFYX7deSRFtSrYpn1PlILBs5BAH+X
|
1613 |
-
4QokPB0BBO490o0JlwzgdeT6+3eKKvUDYEs2ixYjFq0JcfRK9ChQtP6IHG4/bC8vCVlbpVsLM5ni
|
1614 |
-
wz2J+Wos77LTBumjQjBAMB0GA1UdDgQWBBR1cacZSBm8nZ3qQUfflMRId5nTeTAOBgNVHQ8BAf8E
|
1615 |
-
BAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAKBggqhkjOPQQDAwNoADBlAjEA7wNbeqy3eApyt4jf/7VG
|
1616 |
-
FAkK+qDmfQjGGoe9GKhzvSbKYAydzpmfz1wPMOG+FDHqAjAU9JM8SaczepBGR7NjfRObTrdvGDeA
|
1617 |
-
U/7dIOA1mjbRxwG55tzd8/8dLDoWV9mSOdY=
|
1618 |
-
-----END CERTIFICATE-----
|
1619 |
-
|
1620 |
-
OISTE WISeKey Global Root GA CA
|
1621 |
-
===============================
|
1622 |
-
-----BEGIN CERTIFICATE-----
|
1623 |
-
MIID8TCCAtmgAwIBAgIQQT1yx/RrH4FDffHSKFTfmjANBgkqhkiG9w0BAQUFADCBijELMAkGA1UE
|
1624 |
-
BhMCQ0gxEDAOBgNVBAoTB1dJU2VLZXkxGzAZBgNVBAsTEkNvcHlyaWdodCAoYykgMjAwNTEiMCAG
|
1625 |
-
A1UECxMZT0lTVEUgRm91bmRhdGlvbiBFbmRvcnNlZDEoMCYGA1UEAxMfT0lTVEUgV0lTZUtleSBH
|
1626 |
-
bG9iYWwgUm9vdCBHQSBDQTAeFw0wNTEyMTExNjAzNDRaFw0zNzEyMTExNjA5NTFaMIGKMQswCQYD
|
1627 |
-
VQQGEwJDSDEQMA4GA1UEChMHV0lTZUtleTEbMBkGA1UECxMSQ29weXJpZ2h0IChjKSAyMDA1MSIw
|
1628 |
-
IAYDVQQLExlPSVNURSBGb3VuZGF0aW9uIEVuZG9yc2VkMSgwJgYDVQQDEx9PSVNURSBXSVNlS2V5
|
1629 |
-
IEdsb2JhbCBSb290IEdBIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAy0+zAJs9
|
1630 |
-
Nt350UlqaxBJH+zYK7LG+DKBKUOVTJoZIyEVRd7jyBxRVVuuk+g3/ytr6dTqvirdqFEr12bDYVxg
|
1631 |
-
Asj1znJ7O7jyTmUIms2kahnBAbtzptf2w93NvKSLtZlhuAGio9RN1AU9ka34tAhxZK9w8RxrfvbD
|
1632 |
-
d50kc3vkDIzh2TbhmYsFmQvtRTEJysIA2/dyoJaqlYfQjse2YXMNdmaM3Bu0Y6Kff5MTMPGhJ9vZ
|
1633 |
-
/yxViJGg4E8HsChWjBgbl0SOid3gF27nKu+POQoxhILYQBRJLnpB5Kf+42TMwVlxSywhp1t94B3R
|
1634 |
-
LoGbw9ho972WG6xwsRYUC9tguSYBBQIDAQABo1EwTzALBgNVHQ8EBAMCAYYwDwYDVR0TAQH/BAUw
|
1635 |
-
AwEB/zAdBgNVHQ4EFgQUswN+rja8sHnR3JQmthG+IbJphpQwEAYJKwYBBAGCNxUBBAMCAQAwDQYJ
|
1636 |
-
KoZIhvcNAQEFBQADggEBAEuh/wuHbrP5wUOxSPMowB0uyQlB+pQAHKSkq0lPjz0e701vvbyk9vIm
|
1637 |
-
MMkQyh2I+3QZH4VFvbBsUfk2ftv1TDI6QU9bR8/oCy22xBmddMVHxjtqD6wU2zz0c5ypBd8A3HR4
|
1638 |
-
+vg1YFkCExh8vPtNsCBtQ7tgMHpnM1zFmdH4LTlSc/uMqpclXHLZCB6rTjzjgTGfA6b7wP4piFXa
|
1639 |
-
hNVQA7bihKOmNqoROgHhGEvWRGizPflTdISzRpFGlgC3gCy24eMQ4tui5yiPAZZiFj4A4xylNoEY
|
1640 |
-
okxSdsARo27mHbrjWr42U8U+dY+GaSlYU7Wcu2+fXMUY7N0v4ZjJ/L7fCg0=
|
1641 |
-
-----END CERTIFICATE-----
|
1642 |
-
|
1643 |
-
Certigna
|
1644 |
-
========
|
1645 |
-
-----BEGIN CERTIFICATE-----
|
1646 |
-
MIIDqDCCApCgAwIBAgIJAP7c4wEPyUj/MA0GCSqGSIb3DQEBBQUAMDQxCzAJBgNVBAYTAkZSMRIw
|
1647 |
-
EAYDVQQKDAlEaGlteW90aXMxETAPBgNVBAMMCENlcnRpZ25hMB4XDTA3MDYyOTE1MTMwNVoXDTI3
|
1648 |
-
MDYyOTE1MTMwNVowNDELMAkGA1UEBhMCRlIxEjAQBgNVBAoMCURoaW15b3RpczERMA8GA1UEAwwI
|
1649 |
-
Q2VydGlnbmEwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDIaPHJ1tazNHUmgh7stL7q
|
1650 |
-
XOEm7RFHYeGifBZ4QCHkYJ5ayGPhxLGWkv8YbWkj4Sti993iNi+RB7lIzw7sebYs5zRLcAglozyH
|
1651 |
-
GxnygQcPOJAZ0xH+hrTy0V4eHpbNgGzOOzGTtvKg0KmVEn2lmsxryIRWijOp5yIVUxbwzBfsV1/p
|
1652 |
-
ogqYCd7jX5xv3EjjhQsVWqa6n6xI4wmy9/Qy3l40vhx4XUJbzg4ij02Q130yGLMLLGq/jj8UEYkg
|
1653 |
-
DncUtT2UCIf3JR7VsmAA7G8qKCVuKj4YYxclPz5EIBb2JsglrgVKtOdjLPOMFlN+XPsRGgjBRmKf
|
1654 |
-
Irjxwo1p3Po6WAbfAgMBAAGjgbwwgbkwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUGu3+QTmQ
|
1655 |
-
tCRZvgHyUtVF9lo53BEwZAYDVR0jBF0wW4AUGu3+QTmQtCRZvgHyUtVF9lo53BGhOKQ2MDQxCzAJ
|
1656 |
-
BgNVBAYTAkZSMRIwEAYDVQQKDAlEaGlteW90aXMxETAPBgNVBAMMCENlcnRpZ25hggkA/tzjAQ/J
|
1657 |
-
SP8wDgYDVR0PAQH/BAQDAgEGMBEGCWCGSAGG+EIBAQQEAwIABzANBgkqhkiG9w0BAQUFAAOCAQEA
|
1658 |
-
hQMeknH2Qq/ho2Ge6/PAD/Kl1NqV5ta+aDY9fm4fTIrv0Q8hbV6lUmPOEvjvKtpv6zf+EwLHyzs+
|
1659 |
-
ImvaYS5/1HI93TDhHkxAGYwP15zRgzB7mFncfca5DClMoTOi62c6ZYTTluLtdkVwj7Ur3vkj1klu
|
1660 |
-
PBS1xp81HlDQwY9qcEQCYsuuHWhBp6pX6FOqB9IG9tUUBguRA3UsbHK1YZWaDYu5Def131TN3ubY
|
1661 |
-
1gkIl2PlwS6wt0QmwCbAr1UwnjvVNioZBPRcHv/PLLf/0P2HQBHVESO7SMAhqaQoLf0V+LBOK/Qw
|
1662 |
-
WyH8EZE0vkHve52Xdf+XlcCWWC/qu0bXu+TZLg==
|
1663 |
-
-----END CERTIFICATE-----
|
1664 |
-
|
1665 |
-
Deutsche Telekom Root CA 2
|
1666 |
-
==========================
|
1667 |
-
-----BEGIN CERTIFICATE-----
|
1668 |
-
MIIDnzCCAoegAwIBAgIBJjANBgkqhkiG9w0BAQUFADBxMQswCQYDVQQGEwJERTEcMBoGA1UEChMT
|
1669 |
-
RGV1dHNjaGUgVGVsZWtvbSBBRzEfMB0GA1UECxMWVC1UZWxlU2VjIFRydXN0IENlbnRlcjEjMCEG
|
1670 |
-
A1UEAxMaRGV1dHNjaGUgVGVsZWtvbSBSb290IENBIDIwHhcNOTkwNzA5MTIxMTAwWhcNMTkwNzA5
|
1671 |
-
MjM1OTAwWjBxMQswCQYDVQQGEwJERTEcMBoGA1UEChMTRGV1dHNjaGUgVGVsZWtvbSBBRzEfMB0G
|
1672 |
-
A1UECxMWVC1UZWxlU2VjIFRydXN0IENlbnRlcjEjMCEGA1UEAxMaRGV1dHNjaGUgVGVsZWtvbSBS
|
1673 |
-
b290IENBIDIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCrC6M14IspFLEUha88EOQ5
|
1674 |
-
bzVdSq7d6mGNlUn0b2SjGmBmpKlAIoTZ1KXleJMOaAGtuU1cOs7TuKhCQN/Po7qCWWqSG6wcmtoI
|
1675 |
-
KyUn+WkjR/Hg6yx6m/UTAtB+NHzCnjwAWav12gz1MjwrrFDa1sPeg5TKqAyZMg4ISFZbavva4VhY
|
1676 |
-
AUlfckE8FQYBjl2tqriTtM2e66foai1SNNs671x1Udrb8zH57nGYMsRUFUQM+ZtV7a3fGAigo4aK
|
1677 |
-
Se5TBY8ZTNXeWHmb0mocQqvF1afPaA+W5OFhmHZhyJF81j4A4pFQh+GdCuatl9Idxjp9y7zaAzTV
|
1678 |
-
jlsB9WoHtxa2bkp/AgMBAAGjQjBAMB0GA1UdDgQWBBQxw3kbuvVT1xfgiXotF2wKsyudMzAPBgNV
|
1679 |
-
HRMECDAGAQH/AgEFMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQUFAAOCAQEAlGRZrTlk5ynr
|
1680 |
-
E/5aw4sTV8gEJPB0d8Bg42f76Ymmg7+Wgnxu1MM9756AbrsptJh6sTtU6zkXR34ajgv8HzFZMQSy
|
1681 |
-
zhfzLMdiNlXiItiJVbSYSKpk+tYcNthEeFpaIzpXl/V6ME+un2pMSyuOoAPjPuCp1NJ70rOo4nI8
|
1682 |
-
rZ7/gFnkm0W09juwzTkZmDLl6iFhkOQxIY40sfcvNUqFENrnijchvllj4PKFiDFT1FQUhXB59C4G
|
1683 |
-
dyd1Lx+4ivn+xbrYNuSD7Odlt79jWvNGr4GUN9RBjNYj1h7P9WgbRGOiWrqnNVmh5XAFmw4jV5mU
|
1684 |
-
Cm26OWMohpLzGITY+9HPBVZkVw==
|
1685 |
-
-----END CERTIFICATE-----
|
1686 |
-
|
1687 |
-
Cybertrust Global Root
|
1688 |
-
======================
|
1689 |
-
-----BEGIN CERTIFICATE-----
|
1690 |
-
MIIDoTCCAomgAwIBAgILBAAAAAABD4WqLUgwDQYJKoZIhvcNAQEFBQAwOzEYMBYGA1UEChMPQ3li
|
1691 |
-
ZXJ0cnVzdCwgSW5jMR8wHQYDVQQDExZDeWJlcnRydXN0IEdsb2JhbCBSb290MB4XDTA2MTIxNTA4
|
1692 |
-
MDAwMFoXDTIxMTIxNTA4MDAwMFowOzEYMBYGA1UEChMPQ3liZXJ0cnVzdCwgSW5jMR8wHQYDVQQD
|
1693 |
-
ExZDeWJlcnRydXN0IEdsb2JhbCBSb290MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA
|
1694 |
-
+Mi8vRRQZhP/8NN57CPytxrHjoXxEnOmGaoQ25yiZXRadz5RfVb23CO21O1fWLE3TdVJDm71aofW
|
1695 |
-
0ozSJ8bi/zafmGWgE07GKmSb1ZASzxQG9Dvj1Ci+6A74q05IlG2OlTEQXO2iLb3VOm2yHLtgwEZL
|
1696 |
-
AfVJrn5GitB0jaEMAs7u/OePuGtm839EAL9mJRQr3RAwHQeWP032a7iPt3sMpTjr3kfb1V05/Iin
|
1697 |
-
89cqdPHoWqI7n1C6poxFNcJQZZXcY4Lv3b93TZxiyWNzFtApD0mpSPCzqrdsxacwOUBdrsTiXSZT
|
1698 |
-
8M4cIwhhqJQZugRiQOwfOHB3EgZxpzAYXSUnpQIDAQABo4GlMIGiMA4GA1UdDwEB/wQEAwIBBjAP
|
1699 |
-
BgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBS2CHsNesysIEyGVjJez6tuhS1wVzA/BgNVHR8EODA2
|
1700 |
-
MDSgMqAwhi5odHRwOi8vd3d3Mi5wdWJsaWMtdHJ1c3QuY29tL2NybC9jdC9jdHJvb3QuY3JsMB8G
|
1701 |
-
A1UdIwQYMBaAFLYIew16zKwgTIZWMl7Pq26FLXBXMA0GCSqGSIb3DQEBBQUAA4IBAQBW7wojoFRO
|
1702 |
-
lZfJ+InaRcHUowAl9B8Tq7ejhVhpwjCt2BWKLePJzYFa+HMjWqd8BfP9IjsO0QbE2zZMcwSO5bAi
|
1703 |
-
5MXzLqXZI+O4Tkogp24CJJ8iYGd7ix1yCcUxXOl5n4BHPa2hCwcUPUf/A2kaDAtE52Mlp3+yybh2
|
1704 |
-
hO0j9n0Hq0V+09+zv+mKts2oomcrUtW3ZfA5TGOgkXmTUg9U3YO7n9GPp1Nzw8v/MOx8BLjYRB+T
|
1705 |
-
X3EJIrduPuocA06dGiBh+4E37F78CkWr1+cXVdCg6mCbpvbjjFspwgZgFJ0tl0ypkxWdYcQBX0jW
|
1706 |
-
WL1WMRJOEcgh4LMRkWXbtKaIOM5V
|
1707 |
-
-----END CERTIFICATE-----
|
1708 |
-
|
1709 |
-
ePKI Root Certification Authority
|
1710 |
-
=================================
|
1711 |
-
-----BEGIN CERTIFICATE-----
|
1712 |
-
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
-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
-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
-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
-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
-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
-
IZ5qyNUD9WBpj8zwIuQf5/dqIjG3LBXy4P4AakP/h2XGtRrBp0xtInAhijHyl3SJCRImHJ7K2RKi
|
1719 |
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-
BCEIZ43ygknQW/2xzQ+DhNQ+IIX3Sj0rnP0qCglN6oH4EZw=
|
1738 |
-
-----END CERTIFICATE-----
|
1739 |
-
|
1740 |
-
certSIGN ROOT CA
|
1741 |
-
================
|
1742 |
-
-----BEGIN CERTIFICATE-----
|
1743 |
-
MIIDODCCAiCgAwIBAgIGIAYFFnACMA0GCSqGSIb3DQEBBQUAMDsxCzAJBgNVBAYTAlJPMREwDwYD
|
1744 |
-
VQQKEwhjZXJ0U0lHTjEZMBcGA1UECxMQY2VydFNJR04gUk9PVCBDQTAeFw0wNjA3MDQxNzIwMDRa
|
1745 |
-
Fw0zMTA3MDQxNzIwMDRaMDsxCzAJBgNVBAYTAlJPMREwDwYDVQQKEwhjZXJ0U0lHTjEZMBcGA1UE
|
1746 |
-
CxMQY2VydFNJR04gUk9PVCBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALczuX7I
|
1747 |
-
JUqOtdu0KBuqV5Do0SLTZLrTk+jUrIZhQGpgV2hUhE28alQCBf/fm5oqrl0Hj0rDKH/v+yv6efHH
|
1748 |
-
rfAQUySQi2bJqIirr1qjAOm+ukbuW3N7LBeCgV5iLKECZbO9xSsAfsT8AzNXDe3i+s5dRdY4zTW2
|
1749 |
-
ssHQnIFKquSyAVwdj1+ZxLGt24gh65AIgoDzMKND5pCCrlUoSe1b16kQOA7+j0xbm0bqQfWwCHTD
|
1750 |
-
0IgztnzXdN/chNFDDnU5oSVAKOp4yw4sLjmdjItuFhwvJoIQ4uNllAoEwF73XVv4EOLQunpL+943
|
1751 |
-
AAAaWyjj0pxzPjKHmKHJUS/X3qwzs08CAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8B
|
1752 |
-
Af8EBAMCAcYwHQYDVR0OBBYEFOCMm9slSbPxfIbWskKHC9BroNnkMA0GCSqGSIb3DQEBBQUAA4IB
|
1753 |
-
AQA+0hyJLjX8+HXd5n9liPRyTMks1zJO890ZeUe9jjtbkw9QSSQTaxQGcu8J06Gh40CEyecYMnQ8
|
1754 |
-
SG4Pn0vU9x7Tk4ZkVJdjclDVVc/6IJMCopvDI5NOFlV2oHB5bc0hH88vLbwZ44gx+FkagQnIl6Z0
|
1755 |
-
x2DEW8xXjrJ1/RsCCdtZb3KTafcxQdaIOL+Hsr0Wefmq5L6IJd1hJyMctTEHBDa0GpC9oHRxUIlt
|
1756 |
-
vBTjD4au8as+x6AJzKNI0eDbZOeStc+vckNwi/nDhDwTqn6Sm1dTk/pwwpEOMfmbZ13pljheX7Nz
|
1757 |
-
TogVZ96edhBiIL5VaZVDADlN9u6wWk5JRFRYX0KD
|
1758 |
-
-----END CERTIFICATE-----
|
1759 |
-
|
1760 |
-
GeoTrust Primary Certification Authority - G3
|
1761 |
-
=============================================
|
1762 |
-
-----BEGIN CERTIFICATE-----
|
1763 |
-
MIID/jCCAuagAwIBAgIQFaxulBmyeUtB9iepwxgPHzANBgkqhkiG9w0BAQsFADCBmDELMAkGA1UE
|
1764 |
-
BhMCVVMxFjAUBgNVBAoTDUdlb1RydXN0IEluYy4xOTA3BgNVBAsTMChjKSAyMDA4IEdlb1RydXN0
|
1765 |
-
IEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTE2MDQGA1UEAxMtR2VvVHJ1c3QgUHJpbWFy
|
1766 |
-
eSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEczMB4XDTA4MDQwMjAwMDAwMFoXDTM3MTIwMTIz
|
1767 |
-
NTk1OVowgZgxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMTkwNwYDVQQLEzAo
|
1768 |
-
YykgMjAwOCBHZW9UcnVzdCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxNjA0BgNVBAMT
|
1769 |
-
LUdlb1RydXN0IFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMzCCASIwDQYJKoZI
|
1770 |
-
hvcNAQEBBQADggEPADCCAQoCggEBANziXmJYHTNXOTIz+uvLh4yn1ErdBojqZI4xmKU4kB6Yzy5j
|
1771 |
-
K/BGvESyiaHAKAxJcCGVn2TAppMSAmUmhsalifD614SgcK9PGpc/BkTVyetyEH3kMSj7HGHmKAdE
|
1772 |
-
c5IiaacDiGydY8hS2pgn5whMcD60yRLBxWeDXTPzAxHsatBT4tG6NmCUgLthY2xbF37fQJQeqw3C
|
1773 |
-
IShwiP/WJmxsYAQlTlV+fe+/lEjetx3dcI0FX4ilm/LC7urRQEFtYjgdVgbFA0dRIBn8exALDmKu
|
1774 |
-
dlW/X3e+PkkBUz2YJQN2JFodtNuJ6nnltrM7P7pMKEF/BqxqjsHQ9gUdfeZChuOl1UcCAwEAAaNC
|
1775 |
-
MEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFMR5yo6hTgMdHNxr
|
1776 |
-
2zFblD4/MH8tMA0GCSqGSIb3DQEBCwUAA4IBAQAtxRPPVoB7eni9n64smefv2t+UXglpp+duaIy9
|
1777 |
-
cr5HqQ6XErhK8WTTOd8lNNTBzU6B8A8ExCSzNJbGpqow32hhc9f5joWJ7w5elShKKiePEI4ufIbE
|
1778 |
-
Ap7aDHdlDkQNkv39sxY2+hENHYwOB4lqKVb3cvTdFZx3NWZXqxNT2I7BQMXXExZacse3aQHEerGD
|
1779 |
-
AWh9jUGhlBjBJVz88P6DAod8DQ3PLghcSkANPuyBYeYk28rgDi0Hsj5W3I31QYUHSJsMC8tJP33s
|
1780 |
-
t/3LjWeJGqvtux6jAAgIFyqCXDFdRootD4abdNlF+9RAsXqqaC2Gspki4cErx5z481+oghLrGREt
|
1781 |
-
-----END CERTIFICATE-----
|
1782 |
-
|
1783 |
-
thawte Primary Root CA - G2
|
1784 |
-
===========================
|
1785 |
-
-----BEGIN CERTIFICATE-----
|
1786 |
-
MIICiDCCAg2gAwIBAgIQNfwmXNmET8k9Jj1Xm67XVjAKBggqhkjOPQQDAzCBhDELMAkGA1UEBhMC
|
1787 |
-
VVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5jLjE4MDYGA1UECxMvKGMpIDIwMDcgdGhhd3RlLCBJbmMu
|
1788 |
-
IC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxJDAiBgNVBAMTG3RoYXd0ZSBQcmltYXJ5IFJvb3Qg
|
1789 |
-
Q0EgLSBHMjAeFw0wNzExMDUwMDAwMDBaFw0zODAxMTgyMzU5NTlaMIGEMQswCQYDVQQGEwJVUzEV
|
1790 |
-
MBMGA1UEChMMdGhhd3RlLCBJbmMuMTgwNgYDVQQLEy8oYykgMjAwNyB0aGF3dGUsIEluYy4gLSBG
|
1791 |
-
b3IgYXV0aG9yaXplZCB1c2Ugb25seTEkMCIGA1UEAxMbdGhhd3RlIFByaW1hcnkgUm9vdCBDQSAt
|
1792 |
-
IEcyMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEotWcgnuVnfFSeIf+iha/BebfowJPDQfGAFG6DAJS
|
1793 |
-
LSKkQjnE/o/qycG+1E3/n3qe4rF8mq2nhglzh9HnmuN6papu+7qzcMBniKI11KOasf2twu8x+qi5
|
1794 |
-
8/sIxpHR+ymVo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQU
|
1795 |
-
mtgAMADna3+FGO6Lts6KDPgR4bswCgYIKoZIzj0EAwMDaQAwZgIxAN344FdHW6fmCsO99YCKlzUN
|
1796 |
-
G4k8VIZ3KMqh9HneteY4sPBlcIx/AlTCv//YoT7ZzwIxAMSNlPzcU9LcnXgWHxUzI1NS41oxXZ3K
|
1797 |
-
rr0TKUQNJ1uo52icEvdYPy5yAlejj6EULg==
|
1798 |
-
-----END CERTIFICATE-----
|
1799 |
-
|
1800 |
-
thawte Primary Root CA - G3
|
1801 |
-
===========================
|
1802 |
-
-----BEGIN CERTIFICATE-----
|
1803 |
-
MIIEKjCCAxKgAwIBAgIQYAGXt0an6rS0mtZLL/eQ+zANBgkqhkiG9w0BAQsFADCBrjELMAkGA1UE
|
1804 |
-
BhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5jLjEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2
|
1805 |
-
aWNlcyBEaXZpc2lvbjE4MDYGA1UECxMvKGMpIDIwMDggdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhv
|
1806 |
-
cml6ZWQgdXNlIG9ubHkxJDAiBgNVBAMTG3RoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EgLSBHMzAeFw0w
|
1807 |
-
ODA0MDIwMDAwMDBaFw0zNzEyMDEyMzU5NTlaMIGuMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMdGhh
|
1808 |
-
d3RlLCBJbmMuMSgwJgYDVQQLEx9DZXJ0aWZpY2F0aW9uIFNlcnZpY2VzIERpdmlzaW9uMTgwNgYD
|
1809 |
-
VQQLEy8oYykgMjAwOCB0aGF3dGUsIEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTEkMCIG
|
1810 |
-
A1UEAxMbdGhhd3RlIFByaW1hcnkgUm9vdCBDQSAtIEczMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A
|
1811 |
-
MIIBCgKCAQEAsr8nLPvb2FvdeHsbnndmgcs+vHyu86YnmjSjaDFxODNi5PNxZnmxqWWjpYvVj2At
|
1812 |
-
P0LMqmsywCPLLEHd5N/8YZzic7IilRFDGF/Eth9XbAoFWCLINkw6fKXRz4aviKdEAhN0cXMKQlkC
|
1813 |
-
+BsUa0Lfb1+6a4KinVvnSr0eAXLbS3ToO39/fR8EtCab4LRarEc9VbjXsCZSKAExQGbY2SS99irY
|
1814 |
-
7CFJXJv2eul/VTV+lmuNk5Mny5K76qxAwJ/C+IDPXfRa3M50hqY+bAtTyr2SzhkGcuYMXDhpxwTW
|
1815 |
-
vGzOW/b3aJzcJRVIiKHpqfiYnODz1TEoYRFsZ5aNOZnLwkUkOQIDAQABo0IwQDAPBgNVHRMBAf8E
|
1816 |
-
BTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUrWyqlGCc7eT/+j4KdCtjA/e2Wb8wDQYJ
|
1817 |
-
KoZIhvcNAQELBQADggEBABpA2JVlrAmSicY59BDlqQ5mU1143vokkbvnRFHfxhY0Cu9qRFHqKweK
|
1818 |
-
A3rD6z8KLFIWoCtDuSWQP3CpMyVtRRooOyfPqsMpQhvfO0zAMzRbQYi/aytlryjvsvXDqmbOe1bu
|
1819 |
-
t8jLZ8HJnBoYuMTDSQPxYA5QzUbF83d597YV4Djbxy8ooAw/dyZ02SUS2jHaGh7cKUGRIjxpp7sC
|
1820 |
-
8rZcJwOJ9Abqm+RyguOhCcHpABnTPtRwa7pxpqpYrvS76Wy274fMm7v/OeZWYdMKp8RcTGB7BXcm
|
1821 |
-
er/YB1IsYvdwY9k5vG8cwnncdimvzsUsZAReiDZuMdRAGmI0Nj81Aa6sY6A=
|
1822 |
-
-----END CERTIFICATE-----
|
1823 |
-
|
1824 |
-
GeoTrust Primary Certification Authority - G2
|
1825 |
-
=============================================
|
1826 |
-
-----BEGIN CERTIFICATE-----
|
1827 |
-
MIICrjCCAjWgAwIBAgIQPLL0SAoA4v7rJDteYD7DazAKBggqhkjOPQQDAzCBmDELMAkGA1UEBhMC
|
1828 |
-
VVMxFjAUBgNVBAoTDUdlb1RydXN0IEluYy4xOTA3BgNVBAsTMChjKSAyMDA3IEdlb1RydXN0IElu
|
1829 |
-
Yy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTE2MDQGA1UEAxMtR2VvVHJ1c3QgUHJpbWFyeSBD
|
1830 |
-
ZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcyMB4XDTA3MTEwNTAwMDAwMFoXDTM4MDExODIzNTk1
|
1831 |
-
OVowgZgxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMTkwNwYDVQQLEzAoYykg
|
1832 |
-
MjAwNyBHZW9UcnVzdCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxNjA0BgNVBAMTLUdl
|
1833 |
-
b1RydXN0IFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMjB2MBAGByqGSM49AgEG
|
1834 |
-
BSuBBAAiA2IABBWx6P0DFUPlrOuHNxFi79KDNlJ9RVcLSo17VDs6bl8VAsBQps8lL33KSLjHUGMc
|
1835 |
-
KiEIfJo22Av+0SbFWDEwKCXzXV2juLaltJLtbCyf691DiaI8S0iRHVDsJt/WYC69IaNCMEAwDwYD
|
1836 |
-
VR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFBVfNVdRVfslsq0DafwBo/q+
|
1837 |
-
EVXVMAoGCCqGSM49BAMDA2cAMGQCMGSWWaboCd6LuvpaiIjwH5HTRqjySkwCY/tsXzjbLkGTqQ7m
|
1838 |
-
ndwxHLKgpxgceeHHNgIwOlavmnRs9vuD4DPTCF+hnMJbn0bWtsuRBmOiBuczrD6ogRLQy7rQkgu2
|
1839 |
-
npaqBA+K
|
1840 |
-
-----END CERTIFICATE-----
|
1841 |
-
|
1842 |
-
VeriSign Universal Root Certification Authority
|
1843 |
-
===============================================
|
1844 |
-
-----BEGIN CERTIFICATE-----
|
1845 |
-
MIIEuTCCA6GgAwIBAgIQQBrEZCGzEyEDDrvkEhrFHTANBgkqhkiG9w0BAQsFADCBvTELMAkGA1UE
|
1846 |
-
BhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBO
|
1847 |
-
ZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwOCBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVk
|
1848 |
-
IHVzZSBvbmx5MTgwNgYDVQQDEy9WZXJpU2lnbiBVbml2ZXJzYWwgUm9vdCBDZXJ0aWZpY2F0aW9u
|
1849 |
-
IEF1dGhvcml0eTAeFw0wODA0MDIwMDAwMDBaFw0zNzEyMDEyMzU5NTlaMIG9MQswCQYDVQQGEwJV
|
1850 |
-
UzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5ldHdv
|
1851 |
-
cmsxOjA4BgNVBAsTMShjKSAyMDA4IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNl
|
1852 |
-
IG9ubHkxODA2BgNVBAMTL1ZlcmlTaWduIFVuaXZlcnNhbCBSb290IENlcnRpZmljYXRpb24gQXV0
|
1853 |
-
aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAx2E3XrEBNNti1xWb/1hajCMj
|
1854 |
-
1mCOkdeQmIN65lgZOIzF9uVkhbSicfvtvbnazU0AtMgtc6XHaXGVHzk8skQHnOgO+k1KxCHfKWGP
|
1855 |
-
MiJhgsWHH26MfF8WIFFE0XBPV+rjHOPMee5Y2A7Cs0WTwCznmhcrewA3ekEzeOEz4vMQGn+HLL72
|
1856 |
-
9fdC4uW/h2KJXwBL38Xd5HVEMkE6HnFuacsLdUYI0crSK5XQz/u5QGtkjFdN/BMReYTtXlT2NJ8I
|
1857 |
-
AfMQJQYXStrxHXpma5hgZqTZ79IugvHw7wnqRMkVauIDbjPTrJ9VAMf2CGqUuV/c4DPxhGD5WycR
|
1858 |
-
tPwW8rtWaoAljQIDAQABo4GyMIGvMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMG0G
|
1859 |
-
CCsGAQUFBwEMBGEwX6FdoFswWTBXMFUWCWltYWdlL2dpZjAhMB8wBwYFKw4DAhoEFI/l0xqGrI2O
|
1860 |
-
a8PPgGrUSBgsexkuMCUWI2h0dHA6Ly9sb2dvLnZlcmlzaWduLmNvbS92c2xvZ28uZ2lmMB0GA1Ud
|
1861 |
-
DgQWBBS2d/ppSEefUxLVwuoHMnYH0ZcHGTANBgkqhkiG9w0BAQsFAAOCAQEASvj4sAPmLGd75JR3
|
1862 |
-
Y8xuTPl9Dg3cyLk1uXBPY/ok+myDjEedO2Pzmvl2MpWRsXe8rJq+seQxIcaBlVZaDrHC1LGmWazx
|
1863 |
-
Y8u4TB1ZkErvkBYoH1quEPuBUDgMbMzxPcP1Y+Oz4yHJJDnp/RVmRvQbEdBNc6N9Rvk97ahfYtTx
|
1864 |
-
P/jgdFcrGJ2BtMQo2pSXpXDrrB2+BxHw1dvd5Yzw1TKwg+ZX4o+/vqGqvz0dtdQ46tewXDpPaj+P
|
1865 |
-
wGZsY6rp2aQW9IHRlRQOfc2VNNnSj3BzgXucfr2YYdhFh5iQxeuGMMY1v/D/w1WIg0vvBZIGcfK4
|
1866 |
-
mJO37M2CYfE45k+XmCpajQ==
|
1867 |
-
-----END CERTIFICATE-----
|
1868 |
-
|
1869 |
-
VeriSign Class 3 Public Primary Certification Authority - G4
|
1870 |
-
============================================================
|
1871 |
-
-----BEGIN CERTIFICATE-----
|
1872 |
-
MIIDhDCCAwqgAwIBAgIQL4D+I4wOIg9IZxIokYesszAKBggqhkjOPQQDAzCByjELMAkGA1UEBhMC
|
1873 |
-
VVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3
|
1874 |
-
b3JrMTowOAYDVQQLEzEoYykgMjAwNyBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVz
|
1875 |
-
ZSBvbmx5MUUwQwYDVQQDEzxWZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmlj
|
1876 |
-
YXRpb24gQXV0aG9yaXR5IC0gRzQwHhcNMDcxMTA1MDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCByjEL
|
1877 |
-
MAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2lnbiBU
|
1878 |
-
cnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNyBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRo
|
1879 |
-
b3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5
|
1880 |
-
IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IC0gRzQwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAASnVnp8
|
1881 |
-
Utpkmw4tXNherJI9/gHmGUo9FANL+mAnINmDiWn6VMaaGF5VKmTeBvaNSjutEDxlPZCIBIngMGGz
|
1882 |
-
rl0Bp3vefLK+ymVhAIau2o970ImtTR1ZmkGxvEeA3J5iw/mjgbIwga8wDwYDVR0TAQH/BAUwAwEB
|
1883 |
-
/zAOBgNVHQ8BAf8EBAMCAQYwbQYIKwYBBQUHAQwEYTBfoV2gWzBZMFcwVRYJaW1hZ2UvZ2lmMCEw
|
1884 |
-
HzAHBgUrDgMCGgQUj+XTGoasjY5rw8+AatRIGCx7GS4wJRYjaHR0cDovL2xvZ28udmVyaXNpZ24u
|
1885 |
-
Y29tL3ZzbG9nby5naWYwHQYDVR0OBBYEFLMWkf3upm7ktS5Jj4d4gYDs5bG1MAoGCCqGSM49BAMD
|
1886 |
-
A2gAMGUCMGYhDBgmYFo4e1ZC4Kf8NoRRkSAsdk1DPcQdhCPQrNZ8NQbOzWm9kA3bbEhCHQ6qQgIx
|
1887 |
-
AJw9SDkjOVgaFRJZap7v1VmyHVIsmXHNxynfGyphe3HR3vPA5Q06Sqotp9iGKt0uEA==
|
1888 |
-
-----END CERTIFICATE-----
|
1889 |
-
|
1890 |
-
NetLock Arany (Class Gold) Főtanúsítvány
|
1891 |
-
========================================
|
1892 |
-
-----BEGIN CERTIFICATE-----
|
1893 |
-
MIIEFTCCAv2gAwIBAgIGSUEs5AAQMA0GCSqGSIb3DQEBCwUAMIGnMQswCQYDVQQGEwJIVTERMA8G
|
1894 |
-
A1UEBwwIQnVkYXBlc3QxFTATBgNVBAoMDE5ldExvY2sgS2Z0LjE3MDUGA1UECwwuVGFuw7pzw610
|
1895 |
-
dsOhbnlraWFkw7NrIChDZXJ0aWZpY2F0aW9uIFNlcnZpY2VzKTE1MDMGA1UEAwwsTmV0TG9jayBB
|
1896 |
-
cmFueSAoQ2xhc3MgR29sZCkgRsWRdGFuw7pzw610dsOhbnkwHhcNMDgxMjExMTUwODIxWhcNMjgx
|
1897 |
-
MjA2MTUwODIxWjCBpzELMAkGA1UEBhMCSFUxETAPBgNVBAcMCEJ1ZGFwZXN0MRUwEwYDVQQKDAxO
|
1898 |
-
ZXRMb2NrIEtmdC4xNzA1BgNVBAsMLlRhbsO6c8OtdHbDoW55a2lhZMOzayAoQ2VydGlmaWNhdGlv
|
1899 |
-
biBTZXJ2aWNlcykxNTAzBgNVBAMMLE5ldExvY2sgQXJhbnkgKENsYXNzIEdvbGQpIEbFkXRhbsO6
|
1900 |
-
c8OtdHbDoW55MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxCRec75LbRTDofTjl5Bu
|
1901 |
-
0jBFHjzuZ9lk4BqKf8owyoPjIMHj9DrTlF8afFttvzBPhCf2nx9JvMaZCpDyD/V/Q4Q3Y1GLeqVw
|
1902 |
-
/HpYzY6b7cNGbIRwXdrzAZAj/E4wqX7hJ2Pn7WQ8oLjJM2P+FpD/sLj916jAwJRDC7bVWaaeVtAk
|
1903 |
-
H3B5r9s5VA1lddkVQZQBr17s9o3x/61k/iCa11zr/qYfCGSji3ZVrR47KGAuhyXoqq8fxmRGILdw
|
1904 |
-
fzzeSNuWU7c5d+Qa4scWhHaXWy+7GRWF+GmF9ZmnqfI0p6m2pgP8b4Y9VHx2BJtr+UBdADTHLpl1
|
1905 |
-
neWIA6pN+APSQnbAGwIDAKiLo0UwQzASBgNVHRMBAf8ECDAGAQH/AgEEMA4GA1UdDwEB/wQEAwIB
|
1906 |
-
BjAdBgNVHQ4EFgQUzPpnk/C2uNClwB7zU/2MU9+D15YwDQYJKoZIhvcNAQELBQADggEBAKt/7hwW
|
1907 |
-
qZw8UQCgwBEIBaeZ5m8BiFRhbvG5GK1Krf6BQCOUL/t1fC8oS2IkgYIL9WHxHG64YTjrgfpioTta
|
1908 |
-
YtOUZcTh5m2C+C8lcLIhJsFyUR+MLMOEkMNaj7rP9KdlpeuY0fsFskZ1FSNqb4VjMIDw1Z4fKRzC
|
1909 |
-
bLBQWV2QWzuoDTDPv31/zvGdg73JRm4gpvlhUbohL3u+pRVjodSVh/GeufOJ8z2FuLjbvrW5Kfna
|
1910 |
-
NwUASZQDhETnv0Mxz3WLJdH0pmT1kvarBes96aULNmLazAZfNou2XjG4Kvte9nHfRCaexOYNkbQu
|
1911 |
-
dZWAUWpLMKawYqGT8ZvYzsRjdT9ZR7E=
|
1912 |
-
-----END CERTIFICATE-----
|
1913 |
-
|
1914 |
-
Staat der Nederlanden Root CA - G2
|
1915 |
-
==================================
|
1916 |
-
-----BEGIN CERTIFICATE-----
|
1917 |
-
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
-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
-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
-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
-
ZGVybGFuZGVuIFJvb3QgQ0EgLSBHMjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMVZ
|
1922 |
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-
+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
-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
-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
-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
-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
-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
-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
-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
|
1943 |
-
66+KAQ==
|
1944 |
-
-----END CERTIFICATE-----
|
1945 |
-
|
1946 |
-
Hongkong Post Root CA 1
|
1947 |
-
=======================
|
1948 |
-
-----BEGIN CERTIFICATE-----
|
1949 |
-
MIIDMDCCAhigAwIBAgICA+gwDQYJKoZIhvcNAQEFBQAwRzELMAkGA1UEBhMCSEsxFjAUBgNVBAoT
|
1950 |
-
DUhvbmdrb25nIFBvc3QxIDAeBgNVBAMTF0hvbmdrb25nIFBvc3QgUm9vdCBDQSAxMB4XDTAzMDUx
|
1951 |
-
NTA1MTMxNFoXDTIzMDUxNTA0NTIyOVowRzELMAkGA1UEBhMCSEsxFjAUBgNVBAoTDUhvbmdrb25n
|
1952 |
-
IFBvc3QxIDAeBgNVBAMTF0hvbmdrb25nIFBvc3QgUm9vdCBDQSAxMIIBIjANBgkqhkiG9w0BAQEF
|
1953 |
-
AAOCAQ8AMIIBCgKCAQEArP84tulmAknjorThkPlAj3n54r15/gK97iSSHSL22oVyaf7XPwnU3ZG1
|
1954 |
-
ApzQjVrhVcNQhrkpJsLj2aDxaQMoIIBFIi1WpztUlVYiWR8o3x8gPW2iNr4joLFutbEnPzlTCeqr
|
1955 |
-
auh0ssJlXI6/fMN4hM2eFvz1Lk8gKgifd/PFHsSaUmYeSF7jEAaPIpjhZY4bXSNmO7ilMlHIhqqh
|
1956 |
-
qZ5/dpTCpmy3QfDVyAY45tQM4vM7TG1QjMSDJ8EThFk9nnV0ttgCXjqQesBCNnLsak3c78QA3xMY
|
1957 |
-
V18meMjWCnl3v/evt3a5pQuEF10Q6m/hq5URX208o1xNg1vysxmKgIsLhwIDAQABoyYwJDASBgNV
|
1958 |
-
HRMBAf8ECDAGAQH/AgEDMA4GA1UdDwEB/wQEAwIBxjANBgkqhkiG9w0BAQUFAAOCAQEADkbVPK7i
|
1959 |
-
h9legYsCmEEIjEy82tvuJxuC52pF7BaLT4Wg87JwvVqWuspube5Gi27nKi6Wsxkz67SfqLI37pio
|
1960 |
-
l7Yutmcn1KZJ/RyTZXaeQi/cImyaT/JaFTmxcdcrUehtHJjA2Sr0oYJ71clBoiMBdDhViw+5Lmei
|
1961 |
-
IAQ32pwL0xch4I+XeTRvhEgCIDMb5jREn5Fw9IBehEPCKdJsEhTkYY2sEJCehFC78JZvRZ+K88ps
|
1962 |
-
T/oROhUVRsPNH4NbLUES7VBnQRM9IauUiqpOfMGx+6fWtScvl6tu4B3i0RwsH0Ti/L6RoZz71ilT
|
1963 |
-
c4afU9hDDl3WY4JxHYB0yvbiAmvZWg==
|
1964 |
-
-----END CERTIFICATE-----
|
1965 |
-
|
1966 |
-
SecureSign RootCA11
|
1967 |
-
===================
|
1968 |
-
-----BEGIN CERTIFICATE-----
|
1969 |
-
MIIDbTCCAlWgAwIBAgIBATANBgkqhkiG9w0BAQUFADBYMQswCQYDVQQGEwJKUDErMCkGA1UEChMi
|
1970 |
-
SmFwYW4gQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcywgSW5jLjEcMBoGA1UEAxMTU2VjdXJlU2lnbiBS
|
1971 |
-
b290Q0ExMTAeFw0wOTA0MDgwNDU2NDdaFw0yOTA0MDgwNDU2NDdaMFgxCzAJBgNVBAYTAkpQMSsw
|
1972 |
-
KQYDVQQKEyJKYXBhbiBDZXJ0aWZpY2F0aW9uIFNlcnZpY2VzLCBJbmMuMRwwGgYDVQQDExNTZWN1
|
1973 |
-
cmVTaWduIFJvb3RDQTExMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA/XeqpRyQBTvL
|
1974 |
-
TJszi1oURaTnkBbR31fSIRCkF/3frNYfp+TbfPfs37gD2pRY/V1yfIw/XwFndBWW4wI8h9uuywGO
|
1975 |
-
wvNmxoVF9ALGOrVisq/6nL+k5tSAMJjzDbaTj6nU2DbysPyKyiyhFTOVMdrAG/LuYpmGYz+/3ZMq
|
1976 |
-
g6h2uRMft85OQoWPIucuGvKVCbIFtUROd6EgvanyTgp9UK31BQ1FT0Zx/Sg+U/sE2C3XZR1KG/rP
|
1977 |
-
O7AxmjVuyIsG0wCR8pQIZUyxNAYAeoni8McDWc/V1uinMrPmmECGxc0nEovMe863ETxiYAcjPitA
|
1978 |
-
bpSACW22s293bzUIUPsCh8U+iQIDAQABo0IwQDAdBgNVHQ4EFgQUW/hNT7KlhtQ60vFjmqC+CfZX
|
1979 |
-
t94wDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBAKCh
|
1980 |
-
OBZmLqdWHyGcBvod7bkixTgm2E5P7KN/ed5GIaGHd48HCJqypMWvDzKYC3xmKbabfSVSSUOrTC4r
|
1981 |
-
bnpwrxYO4wJs+0LmGJ1F2FXI6Dvd5+H0LgscNFxsWEr7jIhQX5Ucv+2rIrVls4W6ng+4reV6G4pQ
|
1982 |
-
Oh29Dbx7VFALuUKvVaAYga1lme++5Jy/xIWrQbJUb9wlze144o4MjQlJ3WN7WmmWAiGovVJZ6X01
|
1983 |
-
y8hSyn+B/tlr0/cR7SXf+Of5pPpyl4RTDaXQMhhRdlkUbA/r7F+AjHVDg8OFmP9Mni0N5HeDk061
|
1984 |
-
lgeLKBObjBmNQSdJQO7e5iNEOdyhIta6A/I=
|
1985 |
-
-----END CERTIFICATE-----
|
1986 |
-
|
1987 |
-
Microsec e-Szigno Root CA 2009
|
1988 |
-
==============================
|
1989 |
-
-----BEGIN CERTIFICATE-----
|
1990 |
-
MIIECjCCAvKgAwIBAgIJAMJ+QwRORz8ZMA0GCSqGSIb3DQEBCwUAMIGCMQswCQYDVQQGEwJIVTER
|
1991 |
-
MA8GA1UEBwwIQnVkYXBlc3QxFjAUBgNVBAoMDU1pY3Jvc2VjIEx0ZC4xJzAlBgNVBAMMHk1pY3Jv
|
1992 |
-
c2VjIGUtU3ppZ25vIFJvb3QgQ0EgMjAwOTEfMB0GCSqGSIb3DQEJARYQaW5mb0BlLXN6aWduby5o
|
1993 |
-
dTAeFw0wOTA2MTYxMTMwMThaFw0yOTEyMzAxMTMwMThaMIGCMQswCQYDVQQGEwJIVTERMA8GA1UE
|
1994 |
-
BwwIQnVkYXBlc3QxFjAUBgNVBAoMDU1pY3Jvc2VjIEx0ZC4xJzAlBgNVBAMMHk1pY3Jvc2VjIGUt
|
1995 |
-
U3ppZ25vIFJvb3QgQ0EgMjAwOTEfMB0GCSqGSIb3DQEJARYQaW5mb0BlLXN6aWduby5odTCCASIw
|
1996 |
-
DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAOn4j/NjrdqG2KfgQvvPkd6mJviZpWNwrZuuyjNA
|
1997 |
-
fW2WbqEORO7hE52UQlKavXWFdCyoDh2Tthi3jCyoz/tccbna7P7ofo/kLx2yqHWH2Leh5TvPmUpG
|
1998 |
-
0IMZfcChEhyVbUr02MelTTMuhTlAdX4UfIASmFDHQWe4oIBhVKZsTh/gnQ4H6cm6M+f+wFUoLAKA
|
1999 |
-
pxn1ntxVUwOXewdI/5n7N4okxFnMUBBjjqqpGrCEGob5X7uxUG6k0QrM1XF+H6cbfPVTbiJfyyvm
|
2000 |
-
1HxdrtbCxkzlBQHZ7Vf8wSN5/PrIJIOV87VqUQHQd9bpEqH5GoP7ghu5sJf0dgYzQ0mg/wu1+rUC
|
2001 |
-
AwEAAaOBgDB+MA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBTLD8bf
|
2002 |
-
QkPMPcu1SCOhGnqmKrs0aDAfBgNVHSMEGDAWgBTLD8bfQkPMPcu1SCOhGnqmKrs0aDAbBgNVHREE
|
2003 |
-
FDASgRBpbmZvQGUtc3ppZ25vLmh1MA0GCSqGSIb3DQEBCwUAA4IBAQDJ0Q5eLtXMs3w+y/w9/w0o
|
2004 |
-
lZMEyL/azXm4Q5DwpL7v8u8hmLzU1F0G9u5C7DBsoKqpyvGvivo/C3NqPuouQH4frlRheesuCDfX
|
2005 |
-
I/OMn74dseGkddug4lQUsbocKaQY9hK6ohQU4zE1yED/t+AFdlfBHFny+L/k7SViXITwfn4fs775
|
2006 |
-
tyERzAMBVnCnEJIeGzSBHq2cGsMEPO0CYdYeBvNfOofyK/FFh+U9rNHHV4S9a67c2Pm2G2JwCz02
|
2007 |
-
yULyMtd6YebS2z3PyKnJm9zbWETXbzivf3jTo60adbocwTZ8jx5tHMN1Rq41Bab2XD0h7lbwyYIi
|
2008 |
-
LXpUq3DDfSJlgnCW
|
2009 |
-
-----END CERTIFICATE-----
|
2010 |
-
|
2011 |
-
GlobalSign Root CA - R3
|
2012 |
-
=======================
|
2013 |
-
-----BEGIN CERTIFICATE-----
|
2014 |
-
MIIDXzCCAkegAwIBAgILBAAAAAABIVhTCKIwDQYJKoZIhvcNAQELBQAwTDEgMB4GA1UECxMXR2xv
|
2015 |
-
YmFsU2lnbiBSb290IENBIC0gUjMxEzARBgNVBAoTCkdsb2JhbFNpZ24xEzARBgNVBAMTCkdsb2Jh
|
2016 |
-
bFNpZ24wHhcNMDkwMzE4MTAwMDAwWhcNMjkwMzE4MTAwMDAwWjBMMSAwHgYDVQQLExdHbG9iYWxT
|
2017 |
-
aWduIFJvb3QgQ0EgLSBSMzETMBEGA1UEChMKR2xvYmFsU2lnbjETMBEGA1UEAxMKR2xvYmFsU2ln
|
2018 |
-
bjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMwldpB5BngiFvXAg7aEyiie/QV2EcWt
|
2019 |
-
iHL8RgJDx7KKnQRfJMsuS+FggkbhUqsMgUdwbN1k0ev1LKMPgj0MK66X17YUhhB5uzsTgHeMCOFJ
|
2020 |
-
0mpiLx9e+pZo34knlTifBtc+ycsmWQ1z3rDI6SYOgxXG71uL0gRgykmmKPZpO/bLyCiR5Z2KYVc3
|
2021 |
-
rHQU3HTgOu5yLy6c+9C7v/U9AOEGM+iCK65TpjoWc4zdQQ4gOsC0p6Hpsk+QLjJg6VfLuQSSaGjl
|
2022 |
-
OCZgdbKfd/+RFO+uIEn8rUAVSNECMWEZXriX7613t2Saer9fwRPvm2L7DWzgVGkWqQPabumDk3F2
|
2023 |
-
xmmFghcCAwEAAaNCMEAwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYE
|
2024 |
-
FI/wS3+oLkUkrk1Q+mOai97i3Ru8MA0GCSqGSIb3DQEBCwUAA4IBAQBLQNvAUKr+yAzv95ZURUm7
|
2025 |
-
lgAJQayzE4aGKAczymvmdLm6AC2upArT9fHxD4q/c2dKg8dEe3jgr25sbwMpjjM5RcOO5LlXbKr8
|
2026 |
-
EpbsU8Yt5CRsuZRj+9xTaGdWPoO4zzUhw8lo/s7awlOqzJCK6fBdRoyV3XpYKBovHd7NADdBj+1E
|
2027 |
-
bddTKJd+82cEHhXXipa0095MJ6RMG3NzdvQXmcIfeg7jLQitChws/zyrVQ4PkX4268NXSb7hLi18
|
2028 |
-
YIvDQVETI53O9zJrlAGomecsMx86OyXShkDOOyyGeMlhLxS67ttVb9+E7gUJTb0o2HLO02JQZR7r
|
2029 |
-
kpeDMdmztcpHWD9f
|
2030 |
-
-----END CERTIFICATE-----
|
2031 |
-
|
2032 |
-
Autoridad de Certificacion Firmaprofesional CIF A62634068
|
2033 |
-
=========================================================
|
2034 |
-
-----BEGIN CERTIFICATE-----
|
2035 |
-
MIIGFDCCA/ygAwIBAgIIU+w77vuySF8wDQYJKoZIhvcNAQEFBQAwUTELMAkGA1UEBhMCRVMxQjBA
|
2036 |
-
BgNVBAMMOUF1dG9yaWRhZCBkZSBDZXJ0aWZpY2FjaW9uIEZpcm1hcHJvZmVzaW9uYWwgQ0lGIEE2
|
2037 |
-
MjYzNDA2ODAeFw0wOTA1MjAwODM4MTVaFw0zMDEyMzEwODM4MTVaMFExCzAJBgNVBAYTAkVTMUIw
|
2038 |
-
QAYDVQQDDDlBdXRvcmlkYWQgZGUgQ2VydGlmaWNhY2lvbiBGaXJtYXByb2Zlc2lvbmFsIENJRiBB
|
2039 |
-
NjI2MzQwNjgwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDKlmuO6vj78aI14H9M2uDD
|
2040 |
-
Utd9thDIAl6zQyrET2qyyhxdKJp4ERppWVevtSBC5IsP5t9bpgOSL/UR5GLXMnE42QQMcas9UX4P
|
2041 |
-
B99jBVzpv5RvwSmCwLTaUbDBPLutN0pcyvFLNg4kq7/DhHf9qFD0sefGL9ItWY16Ck6WaVICqjaY
|
2042 |
-
7Pz6FIMMNx/Jkjd/14Et5cS54D40/mf0PmbR0/RAz15iNA9wBj4gGFrO93IbJWyTdBSTo3OxDqqH
|
2043 |
-
ECNZXyAFGUftaI6SEspd/NYrspI8IM/hX68gvqB2f3bl7BqGYTM+53u0P6APjqK5am+5hyZvQWyI
|
2044 |
-
plD9amML9ZMWGxmPsu2bm8mQ9QEM3xk9Dz44I8kvjwzRAv4bVdZO0I08r0+k8/6vKtMFnXkIoctX
|
2045 |
-
MbScyJCyZ/QYFpM6/EfY0XiWMR+6KwxfXZmtY4laJCB22N/9q06mIqqdXuYnin1oKaPnirjaEbsX
|
2046 |
-
LZmdEyRG98Xi2J+Of8ePdG1asuhy9azuJBCtLxTa/y2aRnFHvkLfuwHb9H/TKI8xWVvTyQKmtFLK
|
2047 |
-
bpf7Q8UIJm+K9Lv9nyiqDdVF8xM6HdjAeI9BZzwelGSuewvF6NkBiDkal4ZkQdU7hwxu+g/GvUgU
|
2048 |
-
vzlN1J5Bto+WHWOWk9mVBngxaJ43BjuAiUVhOSPHG0SjFeUc+JIwuwIDAQABo4HvMIHsMBIGA1Ud
|
2049 |
-
EwEB/wQIMAYBAf8CAQEwDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBRlzeurNR4APn7VdMActHNH
|
2050 |
-
DhpkLzCBpgYDVR0gBIGeMIGbMIGYBgRVHSAAMIGPMC8GCCsGAQUFBwIBFiNodHRwOi8vd3d3LmZp
|
2051 |
-
cm1hcHJvZmVzaW9uYWwuY29tL2NwczBcBggrBgEFBQcCAjBQHk4AUABhAHMAZQBvACAAZABlACAA
|
2052 |
-
bABhACAAQgBvAG4AYQBuAG8AdgBhACAANAA3ACAAQgBhAHIAYwBlAGwAbwBuAGEAIAAwADgAMAAx
|
2053 |
-
ADcwDQYJKoZIhvcNAQEFBQADggIBABd9oPm03cXF661LJLWhAqvdpYhKsg9VSytXjDvlMd3+xDLx
|
2054 |
-
51tkljYyGOylMnfX40S2wBEqgLk9am58m9Ot/MPWo+ZkKXzR4Tgegiv/J2Wv+xYVxC5xhOW1//qk
|
2055 |
-
R71kMrv2JYSiJ0L1ILDCExARzRAVukKQKtJE4ZYm6zFIEv0q2skGz3QeqUvVhyj5eTSSPi5E6PaP
|
2056 |
-
T481PyWzOdxjKpBrIF/EUhJOlywqrJ2X3kjyo2bbwtKDlaZmp54lD+kLM5FlClrD2VQS3a/DTg4f
|
2057 |
-
Jl4N3LON7NWBcN7STyQF82xO9UxJZo3R/9ILJUFI/lGExkKvgATP0H5kSeTy36LssUzAKh3ntLFl
|
2058 |
-
osS88Zj0qnAHY7S42jtM+kAiMFsRpvAFDsYCA0irhpuF3dvd6qJ2gHN99ZwExEWN57kci57q13XR
|
2059 |
-
crHedUTnQn3iV2t93Jm8PYMo6oCTjcVMZcFwgbg4/EMxsvYDNEeyrPsiBsse3RdHHF9mudMaotoR
|
2060 |
-
saS8I8nkvof/uZS2+F0gStRf571oe2XyFR7SOqkt6dhrJKyXWERHrVkY8SFlcN7ONGCoQPHzPKTD
|
2061 |
-
KCOM/iczQ0CgFzzr6juwcqajuUpLXhZI9LK8yIySxZ2frHI2vDSANGupi5LAuBft7HZT9SQBjLMi
|
2062 |
-
6Et8Vcad+qMUu2WFbm5PEn4KPJ2V
|
2063 |
-
-----END CERTIFICATE-----
|
2064 |
-
|
2065 |
-
Izenpe.com
|
2066 |
-
==========
|
2067 |
-
-----BEGIN CERTIFICATE-----
|
2068 |
-
MIIF8TCCA9mgAwIBAgIQALC3WhZIX7/hy/WL1xnmfTANBgkqhkiG9w0BAQsFADA4MQswCQYDVQQG
|
2069 |
-
EwJFUzEUMBIGA1UECgwLSVpFTlBFIFMuQS4xEzARBgNVBAMMCkl6ZW5wZS5jb20wHhcNMDcxMjEz
|
2070 |
-
MTMwODI4WhcNMzcxMjEzMDgyNzI1WjA4MQswCQYDVQQGEwJFUzEUMBIGA1UECgwLSVpFTlBFIFMu
|
2071 |
-
QS4xEzARBgNVBAMMCkl6ZW5wZS5jb20wggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDJ
|
2072 |
-
03rKDx6sp4boFmVqscIbRTJxldn+EFvMr+eleQGPicPK8lVx93e+d5TzcqQsRNiekpsUOqHnJJAK
|
2073 |
-
ClaOxdgmlOHZSOEtPtoKct2jmRXagaKH9HtuJneJWK3W6wyyQXpzbm3benhB6QiIEn6HLmYRY2xU
|
2074 |
-
+zydcsC8Lv/Ct90NduM61/e0aL6i9eOBbsFGb12N4E3GVFWJGjMxCrFXuaOKmMPsOzTFlUFpfnXC
|
2075 |
-
PCDFYbpRR6AgkJOhkEvzTnyFRVSa0QUmQbC1TR0zvsQDyCV8wXDbO/QJLVQnSKwv4cSsPsjLkkxT
|
2076 |
-
OTcj7NMB+eAJRE1NZMDhDVqHIrytG6P+JrUV86f8hBnp7KGItERphIPzidF0BqnMC9bC3ieFUCbK
|
2077 |
-
F7jJeodWLBoBHmy+E60QrLUk9TiRodZL2vG70t5HtfG8gfZZa88ZU+mNFctKy6lvROUbQc/hhqfK
|
2078 |
-
0GqfvEyNBjNaooXlkDWgYlwWTvDjovoDGrQscbNYLN57C9saD+veIR8GdwYDsMnvmfzAuU8Lhij+
|
2079 |
-
0rnq49qlw0dpEuDb8PYZi+17cNcC1u2HGCgsBCRMd+RIihrGO5rUD8r6ddIBQFqNeb+Lz0vPqhbB
|
2080 |
-
leStTIo+F5HUsWLlguWABKQDfo2/2n+iD5dPDNMN+9fR5XJ+HMh3/1uaD7euBUbl8agW7EekFwID
|
2081 |
-
AQABo4H2MIHzMIGwBgNVHREEgagwgaWBD2luZm9AaXplbnBlLmNvbaSBkTCBjjFHMEUGA1UECgw+
|
2082 |
-
SVpFTlBFIFMuQS4gLSBDSUYgQTAxMzM3MjYwLVJNZXJjLlZpdG9yaWEtR2FzdGVpeiBUMTA1NSBG
|
2083 |
-
NjIgUzgxQzBBBgNVBAkMOkF2ZGEgZGVsIE1lZGl0ZXJyYW5lbyBFdG9yYmlkZWEgMTQgLSAwMTAx
|
2084 |
-
MCBWaXRvcmlhLUdhc3RlaXowDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0O
|
2085 |
-
BBYEFB0cZQ6o8iV7tJHP5LGx5r1VdGwFMA0GCSqGSIb3DQEBCwUAA4ICAQB4pgwWSp9MiDrAyw6l
|
2086 |
-
Fn2fuUhfGI8NYjb2zRlrrKvV9pF9rnHzP7MOeIWblaQnIUdCSnxIOvVFfLMMjlF4rJUT3sb9fbga
|
2087 |
-
kEyrkgPH7UIBzg/YsfqikuFgba56awmqxinuaElnMIAkejEWOVt+8Rwu3WwJrfIxwYJOubv5vr8q
|
2088 |
-
hT/AQKM6WfxZSzwoJNu0FXWuDYi6LnPAvViH5ULy617uHjAimcs30cQhbIHsvm0m5hzkQiCeR7Cs
|
2089 |
-
g1lwLDXWrzY0tM07+DKo7+N4ifuNRSzanLh+QBxh5z6ikixL8s36mLYp//Pye6kfLqCTVyvehQP5
|
2090 |
-
aTfLnnhqBbTFMXiJ7HqnheG5ezzevh55hM6fcA5ZwjUukCox2eRFekGkLhObNA5me0mrZJfQRsN5
|
2091 |
-
nXJQY6aYWwa9SG3YOYNw6DXwBdGqvOPbyALqfP2C2sJbUjWumDqtujWTI6cfSN01RpiyEGjkpTHC
|
2092 |
-
ClguGYEQyVB1/OpaFs4R1+7vUIgtYf8/QnMFlEPVjjxOAToZpR9GTnfQXeWBIiGH/pR9hNiTrdZo
|
2093 |
-
Q0iy2+tzJOeRf1SktoA+naM8THLCV8Sg1Mw4J87VBp6iSNnpn86CcDaTmjvfliHjWbcM2pE38P1Z
|
2094 |
-
WrOZyGlsQyYBNWNgVYkDOnXYukrZVP/u3oDYLdE41V4tC5h9Pmzb/CaIxw==
|
2095 |
-
-----END CERTIFICATE-----
|
2096 |
-
|
2097 |
-
Chambers of Commerce Root - 2008
|
2098 |
-
================================
|
2099 |
-
-----BEGIN CERTIFICATE-----
|
2100 |
-
MIIHTzCCBTegAwIBAgIJAKPaQn6ksa7aMA0GCSqGSIb3DQEBBQUAMIGuMQswCQYDVQQGEwJFVTFD
|
2101 |
-
MEEGA1UEBxM6TWFkcmlkIChzZWUgY3VycmVudCBhZGRyZXNzIGF0IHd3dy5jYW1lcmZpcm1hLmNv
|
2102 |
-
bS9hZGRyZXNzKTESMBAGA1UEBRMJQTgyNzQzMjg3MRswGQYDVQQKExJBQyBDYW1lcmZpcm1hIFMu
|
2103 |
-
QS4xKTAnBgNVBAMTIENoYW1iZXJzIG9mIENvbW1lcmNlIFJvb3QgLSAyMDA4MB4XDTA4MDgwMTEy
|
2104 |
-
Mjk1MFoXDTM4MDczMTEyMjk1MFowga4xCzAJBgNVBAYTAkVVMUMwQQYDVQQHEzpNYWRyaWQgKHNl
|
2105 |
-
ZSBjdXJyZW50IGFkZHJlc3MgYXQgd3d3LmNhbWVyZmlybWEuY29tL2FkZHJlc3MpMRIwEAYDVQQF
|
2106 |
-
EwlBODI3NDMyODcxGzAZBgNVBAoTEkFDIENhbWVyZmlybWEgUy5BLjEpMCcGA1UEAxMgQ2hhbWJl
|
2107 |
-
cnMgb2YgQ29tbWVyY2UgUm9vdCAtIDIwMDgwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoIC
|
2108 |
-
AQCvAMtwNyuAWko6bHiUfaN/Gh/2NdW928sNRHI+JrKQUrpjOyhYb6WzbZSm891kDFX29ufyIiKA
|
2109 |
-
XuFixrYp4YFs8r/lfTJqVKAyGVn+H4vXPWCGhSRv4xGzdz4gljUha7MI2XAuZPeEklPWDrCQiorj
|
2110 |
-
h40G072QDuKZoRuGDtqaCrsLYVAGUvGef3bsyw/QHg3PmTA9HMRFEFis1tPo1+XqxQEHd9ZR5gN/
|
2111 |
-
ikilTWh1uem8nk4ZcfUyS5xtYBkL+8ydddy/Js2Pk3g5eXNeJQ7KXOt3EgfLZEFHcpOrUMPrCXZk
|
2112 |
-
NNI5t3YRCQ12RcSprj1qr7V9ZS+UWBDsXHyvfuK2GNnQm05aSd+pZgvMPMZ4fKecHePOjlO+Bd5g
|
2113 |
-
D2vlGts/4+EhySnB8esHnFIbAURRPHsl18TlUlRdJQfKFiC4reRB7noI/plvg6aRArBsNlVq5331
|
2114 |
-
lubKgdaX8ZSD6e2wsWsSaR6s+12pxZjptFtYer49okQ6Y1nUCyXeG0+95QGezdIp1Z8XGQpvvwyQ
|
2115 |
-
0wlf2eOKNcx5Wk0ZN5K3xMGtr/R5JJqyAQuxr1yW84Ay+1w9mPGgP0revq+ULtlVmhduYJ1jbLhj
|
2116 |
-
ya6BXBg14JC7vjxPNyK5fuvPnnchpj04gftI2jE9K+OJ9dC1vX7gUMQSibMjmhAxhduub+84Mxh2
|
2117 |
-
EQIDAQABo4IBbDCCAWgwEgYDVR0TAQH/BAgwBgEB/wIBDDAdBgNVHQ4EFgQU+SSsD7K1+HnA+mCI
|
2118 |
-
G8TZTQKeFxkwgeMGA1UdIwSB2zCB2IAU+SSsD7K1+HnA+mCIG8TZTQKeFxmhgbSkgbEwga4xCzAJ
|
2119 |
-
BgNVBAYTAkVVMUMwQQYDVQQHEzpNYWRyaWQgKHNlZSBjdXJyZW50IGFkZHJlc3MgYXQgd3d3LmNh
|
2120 |
-
bWVyZmlybWEuY29tL2FkZHJlc3MpMRIwEAYDVQQFEwlBODI3NDMyODcxGzAZBgNVBAoTEkFDIENh
|
2121 |
-
bWVyZmlybWEgUy5BLjEpMCcGA1UEAxMgQ2hhbWJlcnMgb2YgQ29tbWVyY2UgUm9vdCAtIDIwMDiC
|
2122 |
-
CQCj2kJ+pLGu2jAOBgNVHQ8BAf8EBAMCAQYwPQYDVR0gBDYwNDAyBgRVHSAAMCowKAYIKwYBBQUH
|
2123 |
-
AgEWHGh0dHA6Ly9wb2xpY3kuY2FtZXJmaXJtYS5jb20wDQYJKoZIhvcNAQEFBQADggIBAJASryI1
|
2124 |
-
wqM58C7e6bXpeHxIvj99RZJe6dqxGfwWPJ+0W2aeaufDuV2I6A+tzyMP3iU6XsxPpcG1Lawk0lgH
|
2125 |
-
3qLPaYRgM+gQDROpI9CF5Y57pp49chNyM/WqfcZjHwj0/gF/JM8rLFQJ3uIrbZLGOU8W6jx+ekbU
|
2126 |
-
RWpGqOt1glanq6B8aBMz9p0w8G8nOSQjKpD9kCk18pPfNKXG9/jvjA9iSnyu0/VU+I22mlaHFoI6
|
2127 |
-
M6taIgj3grrqLuBHmrS1RaMFO9ncLkVAO+rcf+g769HsJtg1pDDFOqxXnrN2pSB7+R5KBWIBpih1
|
2128 |
-
YJeSDW4+TTdDDZIVnBgizVGZoCkaPF+KMjNbMMeJL0eYD6MDxvbxrN8y8NmBGuScvfaAFPDRLLmF
|
2129 |
-
9dijscilIeUcE5fuDr3fKanvNFNb0+RqE4QGtjICxFKuItLcsiFCGtpA8CnJ7AoMXOLQusxI0zcK
|
2130 |
-
zBIKinmwPQN/aUv0NCB9szTqjktk9T79syNnFQ0EuPAtwQlRPLJsFfClI9eDdOTlLsn+mCdCxqvG
|
2131 |
-
nrDQWzilm1DefhiYtUU79nm06PcaewaD+9CL2rvHvRirCG88gGtAPxkZumWK5r7VXNM21+9AUiRg
|
2132 |
-
OGcEMeyP84LG3rlV8zsxkVrctQgVrXYlCg17LofiDKYGvCYQbTed7N14jHyAxfDZd0jQ
|
2133 |
-
-----END CERTIFICATE-----
|
2134 |
-
|
2135 |
-
Global Chambersign Root - 2008
|
2136 |
-
==============================
|
2137 |
-
-----BEGIN CERTIFICATE-----
|
2138 |
-
MIIHSTCCBTGgAwIBAgIJAMnN0+nVfSPOMA0GCSqGSIb3DQEBBQUAMIGsMQswCQYDVQQGEwJFVTFD
|
2139 |
-
MEEGA1UEBxM6TWFkcmlkIChzZWUgY3VycmVudCBhZGRyZXNzIGF0IHd3dy5jYW1lcmZpcm1hLmNv
|
2140 |
-
bS9hZGRyZXNzKTESMBAGA1UEBRMJQTgyNzQzMjg3MRswGQYDVQQKExJBQyBDYW1lcmZpcm1hIFMu
|
2141 |
-
QS4xJzAlBgNVBAMTHkdsb2JhbCBDaGFtYmVyc2lnbiBSb290IC0gMjAwODAeFw0wODA4MDExMjMx
|
2142 |
-
NDBaFw0zODA3MzExMjMxNDBaMIGsMQswCQYDVQQGEwJFVTFDMEEGA1UEBxM6TWFkcmlkIChzZWUg
|
2143 |
-
Y3VycmVudCBhZGRyZXNzIGF0IHd3dy5jYW1lcmZpcm1hLmNvbS9hZGRyZXNzKTESMBAGA1UEBRMJ
|
2144 |
-
QTgyNzQzMjg3MRswGQYDVQQKExJBQyBDYW1lcmZpcm1hIFMuQS4xJzAlBgNVBAMTHkdsb2JhbCBD
|
2145 |
-
aGFtYmVyc2lnbiBSb290IC0gMjAwODCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMDf
|
2146 |
-
VtPkOpt2RbQT2//BthmLN0EYlVJH6xedKYiONWwGMi5HYvNJBL99RDaxccy9Wglz1dmFRP+RVyXf
|
2147 |
-
XjaOcNFccUMd2drvXNL7G706tcuto8xEpw2uIRU/uXpbknXYpBI4iRmKt4DS4jJvVpyR1ogQC7N0
|
2148 |
-
ZJJ0YPP2zxhPYLIj0Mc7zmFLmY/CDNBAspjcDahOo7kKrmCgrUVSY7pmvWjg+b4aqIG7HkF4ddPB
|
2149 |
-
/gBVsIdU6CeQNR1MM62X/JcumIS/LMmjv9GYERTtY/jKmIhYF5ntRQOXfjyGHoiMvvKRhI9lNNgA
|
2150 |
-
TH23MRdaKXoKGCQwoze1eqkBfSbW+Q6OWfH9GzO1KTsXO0G2Id3UwD2ln58fQ1DJu7xsepeY7s2M
|
2151 |
-
H/ucUa6LcL0nn3HAa6x9kGbo1106DbDVwo3VyJ2dwW3Q0L9R5OP4wzg2rtandeavhENdk5IMagfe
|
2152 |
-
Ox2YItaswTXbo6Al/3K1dh3ebeksZixShNBFks4c5eUzHdwHU1SjqoI7mjcv3N2gZOnm3b2u/GSF
|
2153 |
-
HTynyQbehP9r6GsaPMWis0L7iwk+XwhSx2LE1AVxv8Rk5Pihg+g+EpuoHtQ2TS9x9o0o9oOpE9Jh
|
2154 |
-
wZG7SMA0j0GMS0zbaRL/UJScIINZc+18ofLx/d33SdNDWKBWY8o9PeU1VlnpDsogzCtLkykPAgMB
|
2155 |
-
AAGjggFqMIIBZjASBgNVHRMBAf8ECDAGAQH/AgEMMB0GA1UdDgQWBBS5CcqcHtvTbDprru1U8VuT
|
2156 |
-
BjUuXjCB4QYDVR0jBIHZMIHWgBS5CcqcHtvTbDprru1U8VuTBjUuXqGBsqSBrzCBrDELMAkGA1UE
|
2157 |
-
BhMCRVUxQzBBBgNVBAcTOk1hZHJpZCAoc2VlIGN1cnJlbnQgYWRkcmVzcyBhdCB3d3cuY2FtZXJm
|
2158 |
-
aXJtYS5jb20vYWRkcmVzcykxEjAQBgNVBAUTCUE4Mjc0MzI4NzEbMBkGA1UEChMSQUMgQ2FtZXJm
|
2159 |
-
aXJtYSBTLkEuMScwJQYDVQQDEx5HbG9iYWwgQ2hhbWJlcnNpZ24gUm9vdCAtIDIwMDiCCQDJzdPp
|
2160 |
-
1X0jzjAOBgNVHQ8BAf8EBAMCAQYwPQYDVR0gBDYwNDAyBgRVHSAAMCowKAYIKwYBBQUHAgEWHGh0
|
2161 |
-
dHA6Ly9wb2xpY3kuY2FtZXJmaXJtYS5jb20wDQYJKoZIhvcNAQEFBQADggIBAICIf3DekijZBZRG
|
2162 |
-
/5BXqfEv3xoNa/p8DhxJJHkn2EaqbylZUohwEurdPfWbU1Rv4WCiqAm57OtZfMY18dwY6fFn5a+6
|
2163 |
-
ReAJ3spED8IXDneRRXozX1+WLGiLwUePmJs9wOzL9dWCkoQ10b42OFZyMVtHLaoXpGNR6woBrX/s
|
2164 |
-
dZ7LoR/xfxKxueRkf2fWIyr0uDldmOghp+G9PUIadJpwr2hsUF1Jz//7Dl3mLEfXgTpZALVza2Mg
|
2165 |
-
9jFFCDkO9HB+QHBaP9BrQql0PSgvAm11cpUJjUhjxsYjV5KTXjXBjfkK9yydYhz2rXzdpjEetrHH
|
2166 |
-
foUm+qRqtdpjMNHvkzeyZi99Bffnt0uYlDXA2TopwZ2yUDMdSqlapskD7+3056huirRXhOukP9Du
|
2167 |
-
qqqHW2Pok+JrqNS4cnhrG+055F3Lm6qH1U9OAP7Zap88MQ8oAgF9mOinsKJknnn4SPIVqczmyETr
|
2168 |
-
P3iZ8ntxPjzxmKfFGBI/5rsoM0LpRQp8bfKGeS/Fghl9CYl8slR2iK7ewfPM4W7bMdaTrpmg7yVq
|
2169 |
-
c5iJWzouE4gev8CSlDQb4ye3ix5vQv/n6TebUB0tovkC7stYWDpxvGjjqsGvHCgfotwjZT+B6q6Z
|
2170 |
-
09gwzxMNTxXJhLynSC34MCN32EZLeW32jO06f2ARePTpm67VVMB0gNELQp/B
|
2171 |
-
-----END CERTIFICATE-----
|
2172 |
-
|
2173 |
-
Go Daddy Root Certificate Authority - G2
|
2174 |
-
========================================
|
2175 |
-
-----BEGIN CERTIFICATE-----
|
2176 |
-
MIIDxTCCAq2gAwIBAgIBADANBgkqhkiG9w0BAQsFADCBgzELMAkGA1UEBhMCVVMxEDAOBgNVBAgT
|
2177 |
-
B0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxGjAYBgNVBAoTEUdvRGFkZHkuY29tLCBJbmMu
|
2178 |
-
MTEwLwYDVQQDEyhHbyBEYWRkeSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAtIEcyMB4XDTA5
|
2179 |
-
MDkwMTAwMDAwMFoXDTM3MTIzMTIzNTk1OVowgYMxCzAJBgNVBAYTAlVTMRAwDgYDVQQIEwdBcml6
|
2180 |
-
b25hMRMwEQYDVQQHEwpTY290dHNkYWxlMRowGAYDVQQKExFHb0RhZGR5LmNvbSwgSW5jLjExMC8G
|
2181 |
-
A1UEAxMoR28gRGFkZHkgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgLSBHMjCCASIwDQYJKoZI
|
2182 |
-
hvcNAQEBBQADggEPADCCAQoCggEBAL9xYgjx+lk09xvJGKP3gElY6SKDE6bFIEMBO4Tx5oVJnyfq
|
2183 |
-
9oQbTqC023CYxzIBsQU+B07u9PpPL1kwIuerGVZr4oAH/PMWdYA5UXvl+TW2dE6pjYIT5LY/qQOD
|
2184 |
-
+qK+ihVqf94Lw7YZFAXK6sOoBJQ7RnwyDfMAZiLIjWltNowRGLfTshxgtDj6AozO091GB94KPutd
|
2185 |
-
fMh8+7ArU6SSYmlRJQVhGkSBjCypQ5Yj36w6gZoOKcUcqeldHraenjAKOc7xiID7S13MMuyFYkMl
|
2186 |
-
NAJWJwGRtDtwKj9useiciAF9n9T521NtYJ2/LOdYq7hfRvzOxBsDPAnrSTFcaUaz4EcCAwEAAaNC
|
2187 |
-
MEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFDqahQcQZyi27/a9
|
2188 |
-
BUFuIMGU2g/eMA0GCSqGSIb3DQEBCwUAA4IBAQCZ21151fmXWWcDYfF+OwYxdS2hII5PZYe096ac
|
2189 |
-
vNjpL9DbWu7PdIxztDhC2gV7+AJ1uP2lsdeu9tfeE8tTEH6KRtGX+rcuKxGrkLAngPnon1rpN5+r
|
2190 |
-
5N9ss4UXnT3ZJE95kTXWXwTrgIOrmgIttRD02JDHBHNA7XIloKmf7J6raBKZV8aPEjoJpL1E/QYV
|
2191 |
-
N8Gb5DKj7Tjo2GTzLH4U/ALqn83/B2gX2yKQOC16jdFU8WnjXzPKej17CuPKf1855eJ1usV2GDPO
|
2192 |
-
LPAvTK33sefOT6jEm0pUBsV/fdUID+Ic/n4XuKxe9tQWskMJDE32p2u0mYRlynqI4uJEvlz36hz1
|
2193 |
-
-----END CERTIFICATE-----
|
2194 |
-
|
2195 |
-
Starfield Root Certificate Authority - G2
|
2196 |
-
=========================================
|
2197 |
-
-----BEGIN CERTIFICATE-----
|
2198 |
-
MIID3TCCAsWgAwIBAgIBADANBgkqhkiG9w0BAQsFADCBjzELMAkGA1UEBhMCVVMxEDAOBgNVBAgT
|
2199 |
-
B0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxJTAjBgNVBAoTHFN0YXJmaWVsZCBUZWNobm9s
|
2200 |
-
b2dpZXMsIEluYy4xMjAwBgNVBAMTKVN0YXJmaWVsZCBSb290IENlcnRpZmljYXRlIEF1dGhvcml0
|
2201 |
-
eSAtIEcyMB4XDTA5MDkwMTAwMDAwMFoXDTM3MTIzMTIzNTk1OVowgY8xCzAJBgNVBAYTAlVTMRAw
|
2202 |
-
DgYDVQQIEwdBcml6b25hMRMwEQYDVQQHEwpTY290dHNkYWxlMSUwIwYDVQQKExxTdGFyZmllbGQg
|
2203 |
-
VGVjaG5vbG9naWVzLCBJbmMuMTIwMAYDVQQDEylTdGFyZmllbGQgUm9vdCBDZXJ0aWZpY2F0ZSBB
|
2204 |
-
dXRob3JpdHkgLSBHMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAL3twQP89o/8ArFv
|
2205 |
-
W59I2Z154qK3A2FWGMNHttfKPTUuiUP3oWmb3ooa/RMgnLRJdzIpVv257IzdIvpy3Cdhl+72WoTs
|
2206 |
-
bhm5iSzchFvVdPtrX8WJpRBSiUZV9Lh1HOZ/5FSuS/hVclcCGfgXcVnrHigHdMWdSL5stPSksPNk
|
2207 |
-
N3mSwOxGXn/hbVNMYq/NHwtjuzqd+/x5AJhhdM8mgkBj87JyahkNmcrUDnXMN/uLicFZ8WJ/X7Nf
|
2208 |
-
ZTD4p7dNdloedl40wOiWVpmKs/B/pM293DIxfJHP4F8R+GuqSVzRmZTRouNjWwl2tVZi4Ut0HZbU
|
2209 |
-
JtQIBFnQmA4O5t78w+wfkPECAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC
|
2210 |
-
AQYwHQYDVR0OBBYEFHwMMh+n2TB/xH1oo2Kooc6rB1snMA0GCSqGSIb3DQEBCwUAA4IBAQARWfol
|
2211 |
-
TwNvlJk7mh+ChTnUdgWUXuEok21iXQnCoKjUsHU48TRqneSfioYmUeYs0cYtbpUgSpIB7LiKZ3sx
|
2212 |
-
4mcujJUDJi5DnUox9g61DLu34jd/IroAow57UvtruzvE03lRTs2Q9GcHGcg8RnoNAX3FWOdt5oUw
|
2213 |
-
F5okxBDgBPfg8n/Uqgr/Qh037ZTlZFkSIHc40zI+OIF1lnP6aI+xy84fxez6nH7PfrHxBy22/L/K
|
2214 |
-
pL/QlwVKvOoYKAKQvVR4CSFx09F9HdkWsKlhPdAKACL8x3vLCWRFCztAgfd9fDL1mMpYjn0q7pBZ
|
2215 |
-
c2T5NnReJaH1ZgUufzkVqSr7UIuOhWn0
|
2216 |
-
-----END CERTIFICATE-----
|
2217 |
-
|
2218 |
-
Starfield Services Root Certificate Authority - G2
|
2219 |
-
==================================================
|
2220 |
-
-----BEGIN CERTIFICATE-----
|
2221 |
-
MIID7zCCAtegAwIBAgIBADANBgkqhkiG9w0BAQsFADCBmDELMAkGA1UEBhMCVVMxEDAOBgNVBAgT
|
2222 |
-
B0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxJTAjBgNVBAoTHFN0YXJmaWVsZCBUZWNobm9s
|
2223 |
-
b2dpZXMsIEluYy4xOzA5BgNVBAMTMlN0YXJmaWVsZCBTZXJ2aWNlcyBSb290IENlcnRpZmljYXRl
|
2224 |
-
IEF1dGhvcml0eSAtIEcyMB4XDTA5MDkwMTAwMDAwMFoXDTM3MTIzMTIzNTk1OVowgZgxCzAJBgNV
|
2225 |
-
BAYTAlVTMRAwDgYDVQQIEwdBcml6b25hMRMwEQYDVQQHEwpTY290dHNkYWxlMSUwIwYDVQQKExxT
|
2226 |
-
dGFyZmllbGQgVGVjaG5vbG9naWVzLCBJbmMuMTswOQYDVQQDEzJTdGFyZmllbGQgU2VydmljZXMg
|
2227 |
-
Um9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgLSBHMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC
|
2228 |
-
AQoCggEBANUMOsQq+U7i9b4Zl1+OiFOxHz/Lz58gE20pOsgPfTz3a3Y4Y9k2YKibXlwAgLIvWX/2
|
2229 |
-
h/klQ4bnaRtSmpDhcePYLQ1Ob/bISdm28xpWriu2dBTrz/sm4xq6HZYuajtYlIlHVv8loJNwU4Pa
|
2230 |
-
hHQUw2eeBGg6345AWh1KTs9DkTvnVtYAcMtS7nt9rjrnvDH5RfbCYM8TWQIrgMw0R9+53pBlbQLP
|
2231 |
-
LJGmpufehRhJfGZOozptqbXuNC66DQO4M99H67FrjSXZm86B0UVGMpZwh94CDklDhbZsc7tk6mFB
|
2232 |
-
rMnUVN+HL8cisibMn1lUaJ/8viovxFUcdUBgF4UCVTmLfwUCAwEAAaNCMEAwDwYDVR0TAQH/BAUw
|
2233 |
-
AwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFJxfAN+qAdcwKziIorhtSpzyEZGDMA0GCSqG
|
2234 |
-
SIb3DQEBCwUAA4IBAQBLNqaEd2ndOxmfZyMIbw5hyf2E3F/YNoHN2BtBLZ9g3ccaaNnRbobhiCPP
|
2235 |
-
E95Dz+I0swSdHynVv/heyNXBve6SbzJ08pGCL72CQnqtKrcgfU28elUSwhXqvfdqlS5sdJ/PHLTy
|
2236 |
-
xQGjhdByPq1zqwubdQxtRbeOlKyWN7Wg0I8VRw7j6IPdj/3vQQF3zCepYoUz8jcI73HPdwbeyBkd
|
2237 |
-
iEDPfUYd/x7H4c7/I9vG+o1VTqkC50cRRj70/b17KSa7qWFiNyi2LSr2EIZkyXCn0q23KXB56jza
|
2238 |
-
YyWf/Wi3MOxw+3WKt21gZ7IeyLnp2KhvAotnDU0mV3HaIPzBSlCNsSi6
|
2239 |
-
-----END CERTIFICATE-----
|
2240 |
-
|
2241 |
-
AffirmTrust Commercial
|
2242 |
-
======================
|
2243 |
-
-----BEGIN CERTIFICATE-----
|
2244 |
-
MIIDTDCCAjSgAwIBAgIId3cGJyapsXwwDQYJKoZIhvcNAQELBQAwRDELMAkGA1UEBhMCVVMxFDAS
|
2245 |
-
BgNVBAoMC0FmZmlybVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVzdCBDb21tZXJjaWFsMB4XDTEw
|
2246 |
-
MDEyOTE0MDYwNloXDTMwMTIzMTE0MDYwNlowRDELMAkGA1UEBhMCVVMxFDASBgNVBAoMC0FmZmly
|
2247 |
-
bVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVzdCBDb21tZXJjaWFsMIIBIjANBgkqhkiG9w0BAQEF
|
2248 |
-
AAOCAQ8AMIIBCgKCAQEA9htPZwcroRX1BiLLHwGy43NFBkRJLLtJJRTWzsO3qyxPxkEylFf6Eqdb
|
2249 |
-
DuKPHx6GGaeqtS25Xw2Kwq+FNXkyLbscYjfysVtKPcrNcV/pQr6U6Mje+SJIZMblq8Yrba0F8PrV
|
2250 |
-
C8+a5fBQpIs7R6UjW3p6+DM/uO+Zl+MgwdYoic+U+7lF7eNAFxHUdPALMeIrJmqbTFeurCA+ukV6
|
2251 |
-
BfO9m2kVrn1OIGPENXY6BwLJN/3HR+7o8XYdcxXyl6S1yHp52UKqK39c/s4mT6NmgTWvRLpUHhww
|
2252 |
-
MmWd5jyTXlBOeuM61G7MGvv50jeuJCqrVwMiKA1JdX+3KNp1v47j3A55MQIDAQABo0IwQDAdBgNV
|
2253 |
-
HQ4EFgQUnZPGU4teyq8/nx4P5ZmVvCT2lI8wDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC
|
2254 |
-
AQYwDQYJKoZIhvcNAQELBQADggEBAFis9AQOzcAN/wr91LoWXym9e2iZWEnStB03TX8nfUYGXUPG
|
2255 |
-
hi4+c7ImfU+TqbbEKpqrIZcUsd6M06uJFdhrJNTxFq7YpFzUf1GO7RgBsZNjvbz4YYCanrHOQnDi
|
2256 |
-
qX0GJX0nof5v7LMeJNrjS1UaADs1tDvZ110w/YETifLCBivtZ8SOyUOyXGsViQK8YvxO8rUzqrJv
|
2257 |
-
0wqiUOP2O+guRMLbZjipM1ZI8W0bM40NjD9gN53Tym1+NH4Nn3J2ixufcv1SNUFFApYvHLKac0kh
|
2258 |
-
sUlHRUe072o0EclNmsxZt9YCnlpOZbWUrhvfKbAW8b8Angc6F2S1BLUjIZkKlTuXfO8=
|
2259 |
-
-----END CERTIFICATE-----
|
2260 |
-
|
2261 |
-
AffirmTrust Networking
|
2262 |
-
======================
|
2263 |
-
-----BEGIN CERTIFICATE-----
|
2264 |
-
MIIDTDCCAjSgAwIBAgIIfE8EORzUmS0wDQYJKoZIhvcNAQEFBQAwRDELMAkGA1UEBhMCVVMxFDAS
|
2265 |
-
BgNVBAoMC0FmZmlybVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVzdCBOZXR3b3JraW5nMB4XDTEw
|
2266 |
-
MDEyOTE0MDgyNFoXDTMwMTIzMTE0MDgyNFowRDELMAkGA1UEBhMCVVMxFDASBgNVBAoMC0FmZmly
|
2267 |
-
bVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVzdCBOZXR3b3JraW5nMIIBIjANBgkqhkiG9w0BAQEF
|
2268 |
-
AAOCAQ8AMIIBCgKCAQEAtITMMxcua5Rsa2FSoOujz3mUTOWUgJnLVWREZY9nZOIG41w3SfYvm4SE
|
2269 |
-
Hi3yYJ0wTsyEheIszx6e/jarM3c1RNg1lho9Nuh6DtjVR6FqaYvZ/Ls6rnla1fTWcbuakCNrmreI
|
2270 |
-
dIcMHl+5ni36q1Mr3Lt2PpNMCAiMHqIjHNRqrSK6mQEubWXLviRmVSRLQESxG9fhwoXA3hA/Pe24
|
2271 |
-
/PHxI1Pcv2WXb9n5QHGNfb2V1M6+oF4nI979ptAmDgAp6zxG8D1gvz9Q0twmQVGeFDdCBKNwV6gb
|
2272 |
-
h+0t+nvujArjqWaJGctB+d1ENmHP4ndGyH329JKBNv3bNPFyfvMMFr20FQIDAQABo0IwQDAdBgNV
|
2273 |
-
HQ4EFgQUBx/S55zawm6iQLSwelAQUHTEyL0wDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC
|
2274 |
-
AQYwDQYJKoZIhvcNAQEFBQADggEBAIlXshZ6qML91tmbmzTCnLQyFE2npN/svqe++EPbkTfOtDIu
|
2275 |
-
UFUaNU52Q3Eg75N3ThVwLofDwR1t3Mu1J9QsVtFSUzpE0nPIxBsFZVpikpzuQY0x2+c06lkh1QF6
|
2276 |
-
12S4ZDnNye2v7UsDSKegmQGA3GWjNq5lWUhPgkvIZfFXHeVZLgo/bNjR9eUJtGxUAArgFU2HdW23
|
2277 |
-
WJZa3W3SAKD0m0i+wzekujbgfIeFlxoVot4uolu9rxj5kFDNcFn4J2dHy8egBzp90SxdbBk6ZrV9
|
2278 |
-
/ZFvgrG+CJPbFEfxojfHRZ48x3evZKiT3/Zpg4Jg8klCNO1aAFSFHBY2kgxc+qatv9s=
|
2279 |
-
-----END CERTIFICATE-----
|
2280 |
-
|
2281 |
-
AffirmTrust Premium
|
2282 |
-
===================
|
2283 |
-
-----BEGIN CERTIFICATE-----
|
2284 |
-
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
-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
-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
-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
-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
-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
-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
-
+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
-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
-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
-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
-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
-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
-
+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
-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
-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
-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
-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
-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
-
+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
-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
-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
-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
-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
|
2308 |
-
-----END CERTIFICATE-----
|
2309 |
-
|
2310 |
-
AffirmTrust Premium ECC
|
2311 |
-
=======================
|
2312 |
-
-----BEGIN CERTIFICATE-----
|
2313 |
-
MIIB/jCCAYWgAwIBAgIIdJclisc/elQwCgYIKoZIzj0EAwMwRTELMAkGA1UEBhMCVVMxFDASBgNV
|
2314 |
-
BAoMC0FmZmlybVRydXN0MSAwHgYDVQQDDBdBZmZpcm1UcnVzdCBQcmVtaXVtIEVDQzAeFw0xMDAx
|
2315 |
-
MjkxNDIwMjRaFw00MDEyMzExNDIwMjRaMEUxCzAJBgNVBAYTAlVTMRQwEgYDVQQKDAtBZmZpcm1U
|
2316 |
-
cnVzdDEgMB4GA1UEAwwXQWZmaXJtVHJ1c3QgUHJlbWl1bSBFQ0MwdjAQBgcqhkjOPQIBBgUrgQQA
|
2317 |
-
IgNiAAQNMF4bFZ0D0KF5Nbc6PJJ6yhUczWLznCZcBz3lVPqj1swS6vQUX+iOGasvLkjmrBhDeKzQ
|
2318 |
-
N8O9ss0s5kfiGuZjuD0uL3jET9v0D6RoTFVya5UdThhClXjMNzyR4ptlKymjQjBAMB0GA1UdDgQW
|
2319 |
-
BBSaryl6wBE1NSZRMADDav5A1a7WPDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAK
|
2320 |
-
BggqhkjOPQQDAwNnADBkAjAXCfOHiFBar8jAQr9HX/VsaobgxCd05DhT1wV/GzTjxi+zygk8N53X
|
2321 |
-
57hG8f2h4nECMEJZh0PUUd+60wkyWs6Iflc9nF9Ca/UHLbXwgpP5WW+uZPpY5Yse42O+tYHNbwKM
|
2322 |
-
eQ==
|
2323 |
-
-----END CERTIFICATE-----
|
2324 |
-
|
2325 |
-
Certum Trusted Network CA
|
2326 |
-
=========================
|
2327 |
-
-----BEGIN CERTIFICATE-----
|
2328 |
-
MIIDuzCCAqOgAwIBAgIDBETAMA0GCSqGSIb3DQEBBQUAMH4xCzAJBgNVBAYTAlBMMSIwIAYDVQQK
|
2329 |
-
ExlVbml6ZXRvIFRlY2hub2xvZ2llcyBTLkEuMScwJQYDVQQLEx5DZXJ0dW0gQ2VydGlmaWNhdGlv
|
2330 |
-
biBBdXRob3JpdHkxIjAgBgNVBAMTGUNlcnR1bSBUcnVzdGVkIE5ldHdvcmsgQ0EwHhcNMDgxMDIy
|
2331 |
-
MTIwNzM3WhcNMjkxMjMxMTIwNzM3WjB+MQswCQYDVQQGEwJQTDEiMCAGA1UEChMZVW5pemV0byBU
|
2332 |
-
ZWNobm9sb2dpZXMgUy5BLjEnMCUGA1UECxMeQ2VydHVtIENlcnRpZmljYXRpb24gQXV0aG9yaXR5
|
2333 |
-
MSIwIAYDVQQDExlDZXJ0dW0gVHJ1c3RlZCBOZXR3b3JrIENBMIIBIjANBgkqhkiG9w0BAQEFAAOC
|
2334 |
-
AQ8AMIIBCgKCAQEA4/t9o3K6wvDJFIf1awFO4W5AB7ptJ11/91sts1rHUV+rpDKmYYe2bg+G0jAC
|
2335 |
-
l/jXaVehGDldamR5xgFZrDwxSjh80gTSSyjoIF87B6LMTXPb865Px1bVWqeWifrzq2jUI4ZZJ88J
|
2336 |
-
J7ysbnKDHDBy3+Ci6dLhdHUZvSqeexVUBBvXQzmtVSjF4hq79MDkrjhJM8x2hZ85RdKknvISjFH4
|
2337 |
-
fOQtf/WsX+sWn7Et0brMkUJ3TCXJkDhv2/DM+44el1k+1WBO5gUo7Ul5E0u6SNsv+XLTOcr+H9g0
|
2338 |
-
cvW0QM8xAcPs3hEtF10fuFDRXhmnad4HMyjKUJX5p1TLVIZQRan5SQIDAQABo0IwQDAPBgNVHRMB
|
2339 |
-
Af8EBTADAQH/MB0GA1UdDgQWBBQIds3LB/8k9sXN7buQvOKEN0Z19zAOBgNVHQ8BAf8EBAMCAQYw
|
2340 |
-
DQYJKoZIhvcNAQEFBQADggEBAKaorSLOAT2mo/9i0Eidi15ysHhE49wcrwn9I0j6vSrEuVUEtRCj
|
2341 |
-
jSfeC4Jj0O7eDDd5QVsisrCaQVymcODU0HfLI9MA4GxWL+FpDQ3Zqr8hgVDZBqWo/5U30Kr+4rP1
|
2342 |
-
mS1FhIrlQgnXdAIv94nYmem8J9RHjboNRhx3zxSkHLmkMcScKHQDNP8zGSal6Q10tz6XxnboJ5aj
|
2343 |
-
Zt3hrvJBW8qYVoNzcOSGGtIxQbovvi0TWnZvTuhOgQ4/WwMioBK+ZlgRSssDxLQqKi2WF+A5VLxI
|
2344 |
-
03YnnZotBqbJ7DnSq9ufmgsnAjUpsUCV5/nonFWIGUbWtzT1fs45mtk48VH3Tyw=
|
2345 |
-
-----END CERTIFICATE-----
|
2346 |
-
|
2347 |
-
TWCA Root Certification Authority
|
2348 |
-
=================================
|
2349 |
-
-----BEGIN CERTIFICATE-----
|
2350 |
-
MIIDezCCAmOgAwIBAgIBATANBgkqhkiG9w0BAQUFADBfMQswCQYDVQQGEwJUVzESMBAGA1UECgwJ
|
2351 |
-
VEFJV0FOLUNBMRAwDgYDVQQLDAdSb290IENBMSowKAYDVQQDDCFUV0NBIFJvb3QgQ2VydGlmaWNh
|
2352 |
-
dGlvbiBBdXRob3JpdHkwHhcNMDgwODI4MDcyNDMzWhcNMzAxMjMxMTU1OTU5WjBfMQswCQYDVQQG
|
2353 |
-
EwJUVzESMBAGA1UECgwJVEFJV0FOLUNBMRAwDgYDVQQLDAdSb290IENBMSowKAYDVQQDDCFUV0NB
|
2354 |
-
IFJvb3QgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEK
|
2355 |
-
AoIBAQCwfnK4pAOU5qfeCTiRShFAh6d8WWQUe7UREN3+v9XAu1bihSX0NXIP+FPQQeFEAcK0HMMx
|
2356 |
-
QhZHhTMidrIKbw/lJVBPhYa+v5guEGcevhEFhgWQxFnQfHgQsIBct+HHK3XLfJ+utdGdIzdjp9xC
|
2357 |
-
oi2SBBtQwXu4PhvJVgSLL1KbralW6cH/ralYhzC2gfeXRfwZVzsrb+RH9JlF/h3x+JejiB03HFyP
|
2358 |
-
4HYlmlD4oFT/RJB2I9IyxsOrBr/8+7/zrX2SYgJbKdM1o5OaQ2RgXbL6Mv87BK9NQGr5x+PvI/1r
|
2359 |
-
y+UPizgN7gr8/g+YnzAx3WxSZfmLgb4i4RxYA7qRG4kHAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIB
|
2360 |
-
BjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRqOFsmjd6LWvJPelSDGRjjCDWmujANBgkqhkiG
|
2361 |
-
9w0BAQUFAAOCAQEAPNV3PdrfibqHDAhUaiBQkr6wQT25JmSDCi/oQMCXKCeCMErJk/9q56YAf4lC
|
2362 |
-
mtYR5VPOL8zy2gXE/uJQxDqGfczafhAJO5I1KlOy/usrBdlsXebQ79NqZp4VKIV66IIArB6nCWlW
|
2363 |
-
QtNoURi+VJq/REG6Sb4gumlc7rh3zc5sH62Dlhh9DrUUOYTxKOkto557HnpyWoOzeW/vtPzQCqVY
|
2364 |
-
T0bf+215WfKEIlKuD8z7fDvnaspHYcN6+NOSBB+4IIThNlQWx0DeO4pz3N/GCUzf7Nr/1FNCocny
|
2365 |
-
Yh0igzyXxfkZYiesZSLX0zzG5Y6yU8xJzrww/nsOM5D77dIUkR8Hrw==
|
2366 |
-
-----END CERTIFICATE-----
|
2367 |
-
|
2368 |
-
Security Communication RootCA2
|
2369 |
-
==============================
|
2370 |
-
-----BEGIN CERTIFICATE-----
|
2371 |
-
MIIDdzCCAl+gAwIBAgIBADANBgkqhkiG9w0BAQsFADBdMQswCQYDVQQGEwJKUDElMCMGA1UEChMc
|
2372 |
-
U0VDT00gVHJ1c3QgU3lzdGVtcyBDTy4sTFRELjEnMCUGA1UECxMeU2VjdXJpdHkgQ29tbXVuaWNh
|
2373 |
-
dGlvbiBSb290Q0EyMB4XDTA5MDUyOTA1MDAzOVoXDTI5MDUyOTA1MDAzOVowXTELMAkGA1UEBhMC
|
2374 |
-
SlAxJTAjBgNVBAoTHFNFQ09NIFRydXN0IFN5c3RlbXMgQ08uLExURC4xJzAlBgNVBAsTHlNlY3Vy
|
2375 |
-
aXR5IENvbW11bmljYXRpb24gUm9vdENBMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB
|
2376 |
-
ANAVOVKxUrO6xVmCxF1SrjpDZYBLx/KWvNs2l9amZIyoXvDjChz335c9S672XewhtUGrzbl+dp++
|
2377 |
-
+T42NKA7wfYxEUV0kz1XgMX5iZnK5atq1LXaQZAQwdbWQonCv/Q4EpVMVAX3NuRFg3sUZdbcDE3R
|
2378 |
-
3n4MqzvEFb46VqZab3ZpUql6ucjrappdUtAtCms1FgkQhNBqyjoGADdH5H5XTz+L62e4iKrFvlNV
|
2379 |
-
spHEfbmwhRkGeC7bYRr6hfVKkaHnFtWOojnflLhwHyg/i/xAXmODPIMqGplrz95Zajv8bxbXH/1K
|
2380 |
-
EOtOghY6rCcMU/Gt1SSwawNQwS08Ft1ENCcadfsCAwEAAaNCMEAwHQYDVR0OBBYEFAqFqXdlBZh8
|
2381 |
-
QIH4D5csOPEK7DzPMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEB
|
2382 |
-
CwUAA4IBAQBMOqNErLlFsceTfsgLCkLfZOoc7llsCLqJX2rKSpWeeo8HxdpFcoJxDjrSzG+ntKEj
|
2383 |
-
u/Ykn8sX/oymzsLS28yN/HH8AynBbF0zX2S2ZTuJbxh2ePXcokgfGT+Ok+vx+hfuzU7jBBJV1uXk
|
2384 |
-
3fs+BXziHV7Gp7yXT2g69ekuCkO2r1dcYmh8t/2jioSgrGK+KwmHNPBqAbubKVY8/gA3zyNs8U6q
|
2385 |
-
tnRGEmyR7jTV7JqR50S+kDFy1UkC9gLl9B/rfNmWVan/7Ir5mUf/NVoCqgTLiluHcSmRvaS0eg29
|
2386 |
-
mvVXIwAHIRc/SjnRBUkLp7Y3gaVdjKozXoEofKd9J+sAro03
|
2387 |
-
-----END CERTIFICATE-----
|
2388 |
-
|
2389 |
-
EC-ACC
|
2390 |
-
======
|
2391 |
-
-----BEGIN CERTIFICATE-----
|
2392 |
-
MIIFVjCCBD6gAwIBAgIQ7is969Qh3hSoYqwE893EATANBgkqhkiG9w0BAQUFADCB8zELMAkGA1UE
|
2393 |
-
BhMCRVMxOzA5BgNVBAoTMkFnZW5jaWEgQ2F0YWxhbmEgZGUgQ2VydGlmaWNhY2lvIChOSUYgUS0w
|
2394 |
-
ODAxMTc2LUkpMSgwJgYDVQQLEx9TZXJ2ZWlzIFB1YmxpY3MgZGUgQ2VydGlmaWNhY2lvMTUwMwYD
|
2395 |
-
VQQLEyxWZWdldSBodHRwczovL3d3dy5jYXRjZXJ0Lm5ldC92ZXJhcnJlbCAoYykwMzE1MDMGA1UE
|
2396 |
-
CxMsSmVyYXJxdWlhIEVudGl0YXRzIGRlIENlcnRpZmljYWNpbyBDYXRhbGFuZXMxDzANBgNVBAMT
|
2397 |
-
BkVDLUFDQzAeFw0wMzAxMDcyMzAwMDBaFw0zMTAxMDcyMjU5NTlaMIHzMQswCQYDVQQGEwJFUzE7
|
2398 |
-
MDkGA1UEChMyQWdlbmNpYSBDYXRhbGFuYSBkZSBDZXJ0aWZpY2FjaW8gKE5JRiBRLTA4MDExNzYt
|
2399 |
-
SSkxKDAmBgNVBAsTH1NlcnZlaXMgUHVibGljcyBkZSBDZXJ0aWZpY2FjaW8xNTAzBgNVBAsTLFZl
|
2400 |
-
Z2V1IGh0dHBzOi8vd3d3LmNhdGNlcnQubmV0L3ZlcmFycmVsIChjKTAzMTUwMwYDVQQLEyxKZXJh
|
2401 |
-
cnF1aWEgRW50aXRhdHMgZGUgQ2VydGlmaWNhY2lvIENhdGFsYW5lczEPMA0GA1UEAxMGRUMtQUND
|
2402 |
-
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsyLHT+KXQpWIR4NA9h0X84NzJB5R85iK
|
2403 |
-
w5K4/0CQBXCHYMkAqbWUZRkiFRfCQ2xmRJoNBD45b6VLeqpjt4pEndljkYRm4CgPukLjbo73FCeT
|
2404 |
-
ae6RDqNfDrHrZqJyTxIThmV6PttPB/SnCWDaOkKZx7J/sxaVHMf5NLWUhdWZXqBIoH7nF2W4onW4
|
2405 |
-
HvPlQn2v7fOKSGRdghST2MDk/7NQcvJ29rNdQlB50JQ+awwAvthrDk4q7D7SzIKiGGUzE3eeml0a
|
2406 |
-
E9jD2z3Il3rucO2n5nzbcc8tlGLfbdb1OL4/pYUKGbio2Al1QnDE6u/LDsg0qBIimAy4E5S2S+zw
|
2407 |
-
0JDnJwIDAQABo4HjMIHgMB0GA1UdEQQWMBSBEmVjX2FjY0BjYXRjZXJ0Lm5ldDAPBgNVHRMBAf8E
|
2408 |
-
BTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUoMOLRKo3pUW/l4Ba0fF4opvpXY0wfwYD
|
2409 |
-
VR0gBHgwdjB0BgsrBgEEAfV4AQMBCjBlMCwGCCsGAQUFBwIBFiBodHRwczovL3d3dy5jYXRjZXJ0
|
2410 |
-
Lm5ldC92ZXJhcnJlbDA1BggrBgEFBQcCAjApGidWZWdldSBodHRwczovL3d3dy5jYXRjZXJ0Lm5l
|
2411 |
-
dC92ZXJhcnJlbCAwDQYJKoZIhvcNAQEFBQADggEBAKBIW4IB9k1IuDlVNZyAelOZ1Vr/sXE7zDkJ
|
2412 |
-
lF7W2u++AVtd0x7Y/X1PzaBB4DSTv8vihpw3kpBWHNzrKQXlxJ7HNd+KDM3FIUPpqojlNcAZQmNa
|
2413 |
-
Al6kSBg6hW/cnbw/nZzBh7h6YQjpdwt/cKt63dmXLGQehb+8dJahw3oS7AwaboMMPOhyRp/7SNVe
|
2414 |
-
l+axofjk70YllJyJ22k4vuxcDlbHZVHlUIiIv0LVKz3l+bqeLrPK9HOSAgu+TGbrIP65y7WZf+a2
|
2415 |
-
E/rKS03Z7lNGBjvGTq2TWoF+bCpLagVFjPIhpDGQh2xlnJ2lYJU6Un/10asIbvPuW/mIPX64b24D
|
2416 |
-
5EI=
|
2417 |
-
-----END CERTIFICATE-----
|
2418 |
-
|
2419 |
-
Hellenic Academic and Research Institutions RootCA 2011
|
2420 |
-
=======================================================
|
2421 |
-
-----BEGIN CERTIFICATE-----
|
2422 |
-
MIIEMTCCAxmgAwIBAgIBADANBgkqhkiG9w0BAQUFADCBlTELMAkGA1UEBhMCR1IxRDBCBgNVBAoT
|
2423 |
-
O0hlbGxlbmljIEFjYWRlbWljIGFuZCBSZXNlYXJjaCBJbnN0aXR1dGlvbnMgQ2VydC4gQXV0aG9y
|
2424 |
-
aXR5MUAwPgYDVQQDEzdIZWxsZW5pYyBBY2FkZW1pYyBhbmQgUmVzZWFyY2ggSW5zdGl0dXRpb25z
|
2425 |
-
IFJvb3RDQSAyMDExMB4XDTExMTIwNjEzNDk1MloXDTMxMTIwMTEzNDk1MlowgZUxCzAJBgNVBAYT
|
2426 |
-
AkdSMUQwQgYDVQQKEztIZWxsZW5pYyBBY2FkZW1pYyBhbmQgUmVzZWFyY2ggSW5zdGl0dXRpb25z
|
2427 |
-
IENlcnQuIEF1dGhvcml0eTFAMD4GA1UEAxM3SGVsbGVuaWMgQWNhZGVtaWMgYW5kIFJlc2VhcmNo
|
2428 |
-
IEluc3RpdHV0aW9ucyBSb290Q0EgMjAxMTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB
|
2429 |
-
AKlTAOMupvaO+mDYLZU++CwqVE7NuYRhlFhPjz2L5EPzdYmNUeTDN9KKiE15HrcS3UN4SoqS5tdI
|
2430 |
-
1Q+kOilENbgH9mgdVc04UfCMJDGFr4PJfel3r+0ae50X+bOdOFAPplp5kYCvN66m0zH7tSYJnTxa
|
2431 |
-
71HFK9+WXesyHgLacEnsbgzImjeN9/E2YEsmLIKe0HjzDQ9jpFEw4fkrJxIH2Oq9GGKYsFk3fb7u
|
2432 |
-
8yBRQlqD75O6aRXxYp2fmTmCobd0LovUxQt7L/DICto9eQqakxylKHJzkUOap9FNhYS5qXSPFEDH
|
2433 |
-
3N6sQWRstBmbAmNtJGSPRLIl6s5ddAxjMlyNh+UCAwEAAaOBiTCBhjAPBgNVHRMBAf8EBTADAQH/
|
2434 |
-
MAsGA1UdDwQEAwIBBjAdBgNVHQ4EFgQUppFC/RNhSiOeCKQp5dgTBCPuQSUwRwYDVR0eBEAwPqA8
|
2435 |
-
MAWCAy5ncjAFggMuZXUwBoIELmVkdTAGggQub3JnMAWBAy5ncjAFgQMuZXUwBoEELmVkdTAGgQQu
|
2436 |
-
b3JnMA0GCSqGSIb3DQEBBQUAA4IBAQAf73lB4XtuP7KMhjdCSk4cNx6NZrokgclPEg8hwAOXhiVt
|
2437 |
-
XdMiKahsog2p6z0GW5k6x8zDmjR/qw7IThzh+uTczQ2+vyT+bOdrwg3IBp5OjWEopmr95fZi6hg8
|
2438 |
-
TqBTnbI6nOulnJEWtk2C4AwFSKls9cz4y51JtPACpf1wA+2KIaWuE4ZJwzNzvoc7dIsXRSZMFpGD
|
2439 |
-
/md9zU1jZ/rzAxKWeAaNsWftjj++n08C9bMJL/NMh98qy5V8AcysNnq/onN694/BtZqhFLKPM58N
|
2440 |
-
7yLcZnuEvUUXBj08yrl3NI/K6s8/MT7jiOOASSXIl7WdmplNsDz4SgCbZN2fOUvRJ9e4
|
2441 |
-
-----END CERTIFICATE-----
|
2442 |
-
|
2443 |
-
Actalis Authentication Root CA
|
2444 |
-
==============================
|
2445 |
-
-----BEGIN CERTIFICATE-----
|
2446 |
-
MIIFuzCCA6OgAwIBAgIIVwoRl0LE48wwDQYJKoZIhvcNAQELBQAwazELMAkGA1UEBhMCSVQxDjAM
|
2447 |
-
BgNVBAcMBU1pbGFuMSMwIQYDVQQKDBpBY3RhbGlzIFMucC5BLi8wMzM1ODUyMDk2NzEnMCUGA1UE
|
2448 |
-
AwweQWN0YWxpcyBBdXRoZW50aWNhdGlvbiBSb290IENBMB4XDTExMDkyMjExMjIwMloXDTMwMDky
|
2449 |
-
MjExMjIwMlowazELMAkGA1UEBhMCSVQxDjAMBgNVBAcMBU1pbGFuMSMwIQYDVQQKDBpBY3RhbGlz
|
2450 |
-
IFMucC5BLi8wMzM1ODUyMDk2NzEnMCUGA1UEAwweQWN0YWxpcyBBdXRoZW50aWNhdGlvbiBSb290
|
2451 |
-
IENBMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAp8bEpSmkLO/lGMWwUKNvUTufClrJ
|
2452 |
-
wkg4CsIcoBh/kbWHuUA/3R1oHwiD1S0eiKD4j1aPbZkCkpAW1V8IbInX4ay8IMKx4INRimlNAJZa
|
2453 |
-
by/ARH6jDuSRzVju3PvHHkVH3Se5CAGfpiEd9UEtL0z9KK3giq0itFZljoZUj5NDKd45RnijMCO6
|
2454 |
-
zfB9E1fAXdKDa0hMxKufgFpbOr3JpyI/gCczWw63igxdBzcIy2zSekciRDXFzMwujt0q7bd9Zg1f
|
2455 |
-
YVEiVRvjRuPjPdA1YprbrxTIW6HMiRvhMCb8oJsfgadHHwTrozmSBp+Z07/T6k9QnBn+locePGX2
|
2456 |
-
oxgkg4YQ51Q+qDp2JE+BIcXjDwL4k5RHILv+1A7TaLndxHqEguNTVHnd25zS8gebLra8Pu2Fbe8l
|
2457 |
-
EfKXGkJh90qX6IuxEAf6ZYGyojnP9zz/GPvG8VqLWeICrHuS0E4UT1lF9gxeKF+w6D9Fz8+vm2/7
|
2458 |
-
hNN3WpVvrJSEnu68wEqPSpP4RCHiMUVhUE4Q2OM1fEwZtN4Fv6MGn8i1zeQf1xcGDXqVdFUNaBr8
|
2459 |
-
EBtiZJ1t4JWgw5QHVw0U5r0F+7if5t+L4sbnfpb2U8WANFAoWPASUHEXMLrmeGO89LKtmyuy/uE5
|
2460 |
-
jF66CyCU3nuDuP/jVo23Eek7jPKxwV2dpAtMK9myGPW1n0sCAwEAAaNjMGEwHQYDVR0OBBYEFFLY
|
2461 |
-
iDrIn3hm7YnzezhwlMkCAjbQMA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAUUtiIOsifeGbt
|
2462 |
-
ifN7OHCUyQICNtAwDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3DQEBCwUAA4ICAQALe3KHwGCmSUyI
|
2463 |
-
WOYdiPcUZEim2FgKDk8TNd81HdTtBjHIgT5q1d07GjLukD0R0i70jsNjLiNmsGe+b7bAEzlgqqI0
|
2464 |
-
JZN1Ut6nna0Oh4lScWoWPBkdg/iaKWW+9D+a2fDzWochcYBNy+A4mz+7+uAwTc+G02UQGRjRlwKx
|
2465 |
-
K3JCaKygvU5a2hi/a5iB0P2avl4VSM0RFbnAKVy06Ij3Pjaut2L9HmLecHgQHEhb2rykOLpn7VU+
|
2466 |
-
Xlff1ANATIGk0k9jpwlCCRT8AKnCgHNPLsBA2RF7SOp6AsDT6ygBJlh0wcBzIm2Tlf05fbsq4/aC
|
2467 |
-
4yyXX04fkZT6/iyj2HYauE2yOE+b+h1IYHkm4vP9qdCa6HCPSXrW5b0KDtst842/6+OkfcvHlXHo
|
2468 |
-
2qN8xcL4dJIEG4aspCJTQLas/kx2z/uUMsA1n3Y/buWQbqCmJqK4LL7RK4X9p2jIugErsWx0Hbhz
|
2469 |
-
lefut8cl8ABMALJ+tguLHPPAUJ4lueAI3jZm/zel0btUZCzJJ7VLkn5l/9Mt4blOvH+kQSGQQXem
|
2470 |
-
OR/qnuOf0GZvBeyqdn6/axag67XH/JJULysRJyU3eExRarDzzFhdFPFqSBX/wge2sY0PjlxQRrM9
|
2471 |
-
vwGYT7JZVEc+NHt4bVaTLnPqZih4zR0Uv6CPLy64Lo7yFIrM6bV8+2ydDKXhlg==
|
2472 |
-
-----END CERTIFICATE-----
|
2473 |
-
|
2474 |
-
Trustis FPS Root CA
|
2475 |
-
===================
|
2476 |
-
-----BEGIN CERTIFICATE-----
|
2477 |
-
MIIDZzCCAk+gAwIBAgIQGx+ttiD5JNM2a/fH8YygWTANBgkqhkiG9w0BAQUFADBFMQswCQYDVQQG
|
2478 |
-
EwJHQjEYMBYGA1UEChMPVHJ1c3RpcyBMaW1pdGVkMRwwGgYDVQQLExNUcnVzdGlzIEZQUyBSb290
|
2479 |
-
IENBMB4XDTAzMTIyMzEyMTQwNloXDTI0MDEyMTExMzY1NFowRTELMAkGA1UEBhMCR0IxGDAWBgNV
|
2480 |
-
BAoTD1RydXN0aXMgTGltaXRlZDEcMBoGA1UECxMTVHJ1c3RpcyBGUFMgUm9vdCBDQTCCASIwDQYJ
|
2481 |
-
KoZIhvcNAQEBBQADggEPADCCAQoCggEBAMVQe547NdDfxIzNjpvto8A2mfRC6qc+gIMPpqdZh8mQ
|
2482 |
-
RUN+AOqGeSoDvT03mYlmt+WKVoaTnGhLaASMk5MCPjDSNzoiYYkchU59j9WvezX2fihHiTHcDnlk
|
2483 |
-
H5nSW7r+f2C/revnPDgpai/lkQtV/+xvWNUtyd5MZnGPDNcE2gfmHhjjvSkCqPoc4Vu5g6hBSLwa
|
2484 |
-
cY3nYuUtsuvffM/bq1rKMfFMIvMFE/eC+XN5DL7XSxzA0RU8k0Fk0ea+IxciAIleH2ulrG6nS4zt
|
2485 |
-
o3Lmr2NNL4XSFDWaLk6M6jKYKIahkQlBOrTh4/L68MkKokHdqeMDx4gVOxzUGpTXn2RZEm0CAwEA
|
2486 |
-
AaNTMFEwDwYDVR0TAQH/BAUwAwEB/zAfBgNVHSMEGDAWgBS6+nEleYtXQSUhhgtx67JkDoshZzAd
|
2487 |
-
BgNVHQ4EFgQUuvpxJXmLV0ElIYYLceuyZA6LIWcwDQYJKoZIhvcNAQEFBQADggEBAH5Y//01GX2c
|
2488 |
-
GE+esCu8jowU/yyg2kdbw++BLa8F6nRIW/M+TgfHbcWzk88iNVy2P3UnXwmWzaD+vkAMXBJV+JOC
|
2489 |
-
yinpXj9WV4s4NvdFGkwozZ5BuO1WTISkQMi4sKUraXAEasP41BIy+Q7DsdwyhEQsb8tGD+pmQQ9P
|
2490 |
-
8Vilpg0ND2HepZ5dfWWhPBfnqFVO76DH7cZEf1T1o+CP8HxVIo8ptoGj4W1OLBuAZ+ytIJ8MYmHV
|
2491 |
-
l/9D7S3B2l0pKoU/rGXuhg8FjZBf3+6f9L/uHfuY5H+QK4R4EA5sSVPvFVtlRkpdr7r7OnIdzfYl
|
2492 |
-
iB6XzCGcKQENZetX2fNXlrtIzYE=
|
2493 |
-
-----END CERTIFICATE-----
|
2494 |
-
|
2495 |
-
Buypass Class 2 Root CA
|
2496 |
-
=======================
|
2497 |
-
-----BEGIN CERTIFICATE-----
|
2498 |
-
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
-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
-
DTEwMTAyNjA4MzgwM1oXDTQwMTAyNjA4MzgwM1owTjELMAkGA1UEBhMCTk8xHTAbBgNVBAoMFEJ1
|
2501 |
-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
-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
-
g1Lr6hxhFUi7HQfKjK6w3Jad6sNgkoaCKHOcVgb/S2TwDCo3SbXlzwx87vFKu3MwZfPVL4O2fuPn
|
2504 |
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
|
2522 |
-
rJgWVqA=
|
2523 |
-
-----END CERTIFICATE-----
|
2524 |
-
|
2525 |
-
Buypass Class 3 Root CA
|
2526 |
-
=======================
|
2527 |
-
-----BEGIN CERTIFICATE-----
|
2528 |
-
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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-
cSQy9sgL8rxq+JOssgfCX5/bzMiKqr5qb+FJEMwx14C7u8jYog5kV+qi9cKpMRXSIGrs/CIBKM+G
|
2545 |
-
uIAeqcwRpTzyFrNHnfzSgCHEy9BHcEGhyoMZCCxt8l13nIoUE9Q2HJLw5QY33KbmkJs4j1xrG0aG
|
2546 |
-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
-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
-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
-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
-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
-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
|
2552 |
-
Cp/HuZc=
|
2553 |
-
-----END CERTIFICATE-----
|
2554 |
-
|
2555 |
-
T-TeleSec GlobalRoot Class 3
|
2556 |
-
============================
|
2557 |
-
-----BEGIN CERTIFICATE-----
|
2558 |
-
MIIDwzCCAqugAwIBAgIBATANBgkqhkiG9w0BAQsFADCBgjELMAkGA1UEBhMCREUxKzApBgNVBAoM
|
2559 |
-
IlQtU3lzdGVtcyBFbnRlcnByaXNlIFNlcnZpY2VzIEdtYkgxHzAdBgNVBAsMFlQtU3lzdGVtcyBU
|
2560 |
-
cnVzdCBDZW50ZXIxJTAjBgNVBAMMHFQtVGVsZVNlYyBHbG9iYWxSb290IENsYXNzIDMwHhcNMDgx
|
2561 |
-
MDAxMTAyOTU2WhcNMzMxMDAxMjM1OTU5WjCBgjELMAkGA1UEBhMCREUxKzApBgNVBAoMIlQtU3lz
|
2562 |
-
dGVtcyBFbnRlcnByaXNlIFNlcnZpY2VzIEdtYkgxHzAdBgNVBAsMFlQtU3lzdGVtcyBUcnVzdCBD
|
2563 |
-
ZW50ZXIxJTAjBgNVBAMMHFQtVGVsZVNlYyBHbG9iYWxSb290IENsYXNzIDMwggEiMA0GCSqGSIb3
|
2564 |
-
DQEBAQUAA4IBDwAwggEKAoIBAQC9dZPwYiJvJK7genasfb3ZJNW4t/zN8ELg63iIVl6bmlQdTQyK
|
2565 |
-
9tPPcPRStdiTBONGhnFBSivwKixVA9ZIw+A5OO3yXDw/RLyTPWGrTs0NvvAgJ1gORH8EGoel15YU
|
2566 |
-
NpDQSXuhdfsaa3Ox+M6pCSzyU9XDFES4hqX2iys52qMzVNn6chr3IhUciJFrf2blw2qAsCTz34ZF
|
2567 |
-
iP0Zf3WHHx+xGwpzJFu5ZeAsVMhg02YXP+HMVDNzkQI6pn97djmiH5a2OK61yJN0HZ65tOVgnS9W
|
2568 |
-
0eDrXltMEnAMbEQgqxHY9Bn20pxSN+f6tsIxO0rUFJmtxxr1XV/6B7h8DR/Wgx6zAgMBAAGjQjBA
|
2569 |
-
MA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBS1A/d2O2GCahKqGFPr
|
2570 |
-
AyGUv/7OyjANBgkqhkiG9w0BAQsFAAOCAQEAVj3vlNW92nOyWL6ukK2YJ5f+AbGwUgC4TeQbIXQb
|
2571 |
-
fsDuXmkqJa9c1h3a0nnJ85cp4IaH3gRZD/FZ1GSFS5mvJQQeyUapl96Cshtwn5z2r3Ex3XsFpSzT
|
2572 |
-
ucpH9sry9uetuUg/vBa3wW306gmv7PO15wWeph6KU1HWk4HMdJP2udqmJQV0eVp+QD6CSyYRMG7h
|
2573 |
-
P0HHRwA11fXT91Q+gT3aSWqas+8QPebrb9HIIkfLzM8BMZLZGOMivgkeGj5asuRrDFR6fUNOuIml
|
2574 |
-
e9eiPZaGzPImNC1qkp2aGtAw4l1OBLBfiyB+d8E9lYLRRpo7PHi4b6HQDWSieB4pTpPDpFQUWw==
|
2575 |
-
-----END CERTIFICATE-----
|
2576 |
-
|
2577 |
-
EE Certification Centre Root CA
|
2578 |
-
===============================
|
2579 |
-
-----BEGIN CERTIFICATE-----
|
2580 |
-
MIIEAzCCAuugAwIBAgIQVID5oHPtPwBMyonY43HmSjANBgkqhkiG9w0BAQUFADB1MQswCQYDVQQG
|
2581 |
-
EwJFRTEiMCAGA1UECgwZQVMgU2VydGlmaXRzZWVyaW1pc2tlc2t1czEoMCYGA1UEAwwfRUUgQ2Vy
|
2582 |
-
dGlmaWNhdGlvbiBDZW50cmUgUm9vdCBDQTEYMBYGCSqGSIb3DQEJARYJcGtpQHNrLmVlMCIYDzIw
|
2583 |
-
MTAxMDMwMTAxMDMwWhgPMjAzMDEyMTcyMzU5NTlaMHUxCzAJBgNVBAYTAkVFMSIwIAYDVQQKDBlB
|
2584 |
-
UyBTZXJ0aWZpdHNlZXJpbWlza2Vza3VzMSgwJgYDVQQDDB9FRSBDZXJ0aWZpY2F0aW9uIENlbnRy
|
2585 |
-
ZSBSb290IENBMRgwFgYJKoZIhvcNAQkBFglwa2lAc2suZWUwggEiMA0GCSqGSIb3DQEBAQUAA4IB
|
2586 |
-
DwAwggEKAoIBAQDIIMDs4MVLqwd4lfNE7vsLDP90jmG7sWLqI9iroWUyeuuOF0+W2Ap7kaJjbMeM
|
2587 |
-
TC55v6kF/GlclY1i+blw7cNRfdCT5mzrMEvhvH2/UpvObntl8jixwKIy72KyaOBhU8E2lf/slLo2
|
2588 |
-
rpwcpzIP5Xy0xm90/XsY6KxX7QYgSzIwWFv9zajmofxwvI6Sc9uXp3whrj3B9UiHbCe9nyV0gVWw
|
2589 |
-
93X2PaRka9ZP585ArQ/dMtO8ihJTmMmJ+xAdTX7Nfh9WDSFwhfYggx/2uh8Ej+p3iDXE/+pOoYtN
|
2590 |
-
P2MbRMNE1CV2yreN1x5KZmTNXMWcg+HCCIia7E6j8T4cLNlsHaFLAgMBAAGjgYowgYcwDwYDVR0T
|
2591 |
-
AQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFBLyWj7qVhy/zQas8fElyalL1BSZ
|
2592 |
-
MEUGA1UdJQQ+MDwGCCsGAQUFBwMCBggrBgEFBQcDAQYIKwYBBQUHAwMGCCsGAQUFBwMEBggrBgEF
|
2593 |
-
BQcDCAYIKwYBBQUHAwkwDQYJKoZIhvcNAQEFBQADggEBAHv25MANqhlHt01Xo/6tu7Fq1Q+e2+Rj
|
2594 |
-
xY6hUFaTlrg4wCQiZrxTFGGVv9DHKpY5P30osxBAIWrEr7BSdxjhlthWXePdNl4dp1BUoMUq5KqM
|
2595 |
-
lIpPnTX/dqQGE5Gion0ARD9V04I8GtVbvFZMIi5GQ4okQC3zErg7cBqklrkar4dBGmoYDQZPxz5u
|
2596 |
-
uSlNDUmJEYcyW+ZLBMjkXOZ0c5RdFpgTlf7727FE5TpwrDdr5rMzcijJs1eg9gIWiAYLtqZLICjU
|
2597 |
-
3j2LrTcFU3T+bsy8QxdxXvnFzBqpYe73dgzzcvRyrc9yAjYHR8/vGVCJYMzpJJUPwssd8m92kMfM
|
2598 |
-
dcGWxZ0=
|
2599 |
-
-----END CERTIFICATE-----
|
2600 |
-
|
2601 |
-
D-TRUST Root Class 3 CA 2 2009
|
2602 |
-
==============================
|
2603 |
-
-----BEGIN CERTIFICATE-----
|
2604 |
-
MIIEMzCCAxugAwIBAgIDCYPzMA0GCSqGSIb3DQEBCwUAME0xCzAJBgNVBAYTAkRFMRUwEwYDVQQK
|
2605 |
-
DAxELVRydXN0IEdtYkgxJzAlBgNVBAMMHkQtVFJVU1QgUm9vdCBDbGFzcyAzIENBIDIgMjAwOTAe
|
2606 |
-
Fw0wOTExMDUwODM1NThaFw0yOTExMDUwODM1NThaME0xCzAJBgNVBAYTAkRFMRUwEwYDVQQKDAxE
|
2607 |
-
LVRydXN0IEdtYkgxJzAlBgNVBAMMHkQtVFJVU1QgUm9vdCBDbGFzcyAzIENBIDIgMjAwOTCCASIw
|
2608 |
-
DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANOySs96R+91myP6Oi/WUEWJNTrGa9v+2wBoqOAD
|
2609 |
-
ER03UAifTUpolDWzU9GUY6cgVq/eUXjsKj3zSEhQPgrfRlWLJ23DEE0NkVJD2IfgXU42tSHKXzlA
|
2610 |
-
BF9bfsyjxiupQB7ZNoTWSPOSHjRGICTBpFGOShrvUD9pXRl/RcPHAY9RySPocq60vFYJfxLLHLGv
|
2611 |
-
KZAKyVXMD9O0Gu1HNVpK7ZxzBCHQqr0ME7UAyiZsxGsMlFqVlNpQmvH/pStmMaTJOKDfHR+4CS7z
|
2612 |
-
p+hnUquVH+BGPtikw8paxTGA6Eian5Rp/hnd2HN8gcqW3o7tszIFZYQ05ub9VxC1X3a/L7AQDcUC
|
2613 |
-
AwEAAaOCARowggEWMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFP3aFMSfMN4hvR5COfyrYyNJ
|
2614 |
-
4PGEMA4GA1UdDwEB/wQEAwIBBjCB0wYDVR0fBIHLMIHIMIGAoH6gfIZ6bGRhcDovL2RpcmVjdG9y
|
2615 |
-
eS5kLXRydXN0Lm5ldC9DTj1ELVRSVVNUJTIwUm9vdCUyMENsYXNzJTIwMyUyMENBJTIwMiUyMDIw
|
2616 |
-
MDksTz1ELVRydXN0JTIwR21iSCxDPURFP2NlcnRpZmljYXRlcmV2b2NhdGlvbmxpc3QwQ6BBoD+G
|
2617 |
-
PWh0dHA6Ly93d3cuZC10cnVzdC5uZXQvY3JsL2QtdHJ1c3Rfcm9vdF9jbGFzc18zX2NhXzJfMjAw
|
2618 |
-
OS5jcmwwDQYJKoZIhvcNAQELBQADggEBAH+X2zDI36ScfSF6gHDOFBJpiBSVYEQBrLLpME+bUMJm
|
2619 |
-
2H6NMLVwMeniacfzcNsgFYbQDfC+rAF1hM5+n02/t2A7nPPKHeJeaNijnZflQGDSNiH+0LS4F9p0
|
2620 |
-
o3/U37CYAqxva2ssJSRyoWXuJVrl5jLn8t+rSfrzkGkj2wTZ51xY/GXUl77M/C4KzCUqNQT4YJEV
|
2621 |
-
dT1B/yMfGchs64JTBKbkTCJNjYy6zltz7GRUUG3RnFX7acM2w4y8PIWmawomDeCTmGCufsYkl4ph
|
2622 |
-
X5GOZpIJhzbNi5stPvZR1FDUWSi9g/LMKHtThm3YJohw1+qRzT65ysCQblrGXnRl11z+o+I=
|
2623 |
-
-----END CERTIFICATE-----
|
2624 |
-
|
2625 |
-
D-TRUST Root Class 3 CA 2 EV 2009
|
2626 |
-
=================================
|
2627 |
-
-----BEGIN CERTIFICATE-----
|
2628 |
-
MIIEQzCCAyugAwIBAgIDCYP0MA0GCSqGSIb3DQEBCwUAMFAxCzAJBgNVBAYTAkRFMRUwEwYDVQQK
|
2629 |
-
DAxELVRydXN0IEdtYkgxKjAoBgNVBAMMIUQtVFJVU1QgUm9vdCBDbGFzcyAzIENBIDIgRVYgMjAw
|
2630 |
-
OTAeFw0wOTExMDUwODUwNDZaFw0yOTExMDUwODUwNDZaMFAxCzAJBgNVBAYTAkRFMRUwEwYDVQQK
|
2631 |
-
DAxELVRydXN0IEdtYkgxKjAoBgNVBAMMIUQtVFJVU1QgUm9vdCBDbGFzcyAzIENBIDIgRVYgMjAw
|
2632 |
-
OTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJnxhDRwui+3MKCOvXwEz75ivJn9gpfS
|
2633 |
-
egpnljgJ9hBOlSJzmY3aFS3nBfwZcyK3jpgAvDw9rKFs+9Z5JUut8Mxk2og+KbgPCdM03TP1YtHh
|
2634 |
-
zRnp7hhPTFiu4h7WDFsVWtg6uMQYZB7jM7K1iXdODL/ZlGsTl28So/6ZqQTMFexgaDbtCHu39b+T
|
2635 |
-
7WYxg4zGcTSHThfqr4uRjRxWQa4iN1438h3Z0S0NL2lRp75mpoo6Kr3HGrHhFPC+Oh25z1uxav60
|
2636 |
-
sUYgovseO3Dvk5h9jHOW8sXvhXCtKSb8HgQ+HKDYD8tSg2J87otTlZCpV6LqYQXY+U3EJ/pure35
|
2637 |
-
11H3a6UCAwEAAaOCASQwggEgMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFNOUikxiEyoZLsyv
|
2638 |
-
cop9NteaHNxnMA4GA1UdDwEB/wQEAwIBBjCB3QYDVR0fBIHVMIHSMIGHoIGEoIGBhn9sZGFwOi8v
|
2639 |
-
ZGlyZWN0b3J5LmQtdHJ1c3QubmV0L0NOPUQtVFJVU1QlMjBSb290JTIwQ2xhc3MlMjAzJTIwQ0El
|
2640 |
-
MjAyJTIwRVYlMjAyMDA5LE89RC1UcnVzdCUyMEdtYkgsQz1ERT9jZXJ0aWZpY2F0ZXJldm9jYXRp
|
2641 |
-
b25saXN0MEagRKBChkBodHRwOi8vd3d3LmQtdHJ1c3QubmV0L2NybC9kLXRydXN0X3Jvb3RfY2xh
|
2642 |
-
c3NfM19jYV8yX2V2XzIwMDkuY3JsMA0GCSqGSIb3DQEBCwUAA4IBAQA07XtaPKSUiO8aEXUHL7P+
|
2643 |
-
PPoeUSbrh/Yp3uDx1MYkCenBz1UbtDDZzhr+BlGmFaQt77JLvyAoJUnRpjZ3NOhk31KxEcdzes05
|
2644 |
-
nsKtjHEh8lprr988TlWvsoRlFIm5d8sqMb7Po23Pb0iUMkZv53GMoKaEGTcH8gNFCSuGdXzfX2lX
|
2645 |
-
ANtu2KZyIktQ1HWYVt+3GP9DQ1CuekR78HlR10M9p9OB0/DJT7naxpeG0ILD5EJt/rDiZE4OJudA
|
2646 |
-
NCa1CInXCGNjOCd1HjPqbqjdn5lPdE2BiYBL3ZqXKVwvvoFBuYz/6n1gBp7N1z3TLqMVvKjmJuVv
|
2647 |
-
w9y4AyHqnxbxLFS1
|
2648 |
-
-----END CERTIFICATE-----
|
2649 |
-
|
2650 |
-
CA Disig Root R2
|
2651 |
-
================
|
2652 |
-
-----BEGIN CERTIFICATE-----
|
2653 |
-
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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-
Fh/f5DcfEXP7kAplQ6INfPgGAVUzfbANuPT1rqVCV3w2EYx7XsQDnYx5nQIDAQABo0IwQDAPBgNV
|
2667 |
-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
-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
-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
-
sRHFqQOzVju5hJMiXn7B9hJSi+osZ7z+Nkz1uM/Rs0mSO9MpDpkblvdhuDvEK7Z4bLQjb/D907Je
|
2671 |
-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
-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
-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
-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
-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
-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
|
2677 |
-
7+ZtsH8tZ/3zbBt1RqPlShfppNcL
|
2678 |
-
-----END CERTIFICATE-----
|
2679 |
-
|
2680 |
-
ACCVRAIZ1
|
2681 |
-
=========
|
2682 |
-
-----BEGIN CERTIFICATE-----
|
2683 |
-
MIIH0zCCBbugAwIBAgIIXsO3pkN/pOAwDQYJKoZIhvcNAQEFBQAwQjESMBAGA1UEAwwJQUNDVlJB
|
2684 |
-
SVoxMRAwDgYDVQQLDAdQS0lBQ0NWMQ0wCwYDVQQKDARBQ0NWMQswCQYDVQQGEwJFUzAeFw0xMTA1
|
2685 |
-
MDUwOTM3MzdaFw0zMDEyMzEwOTM3MzdaMEIxEjAQBgNVBAMMCUFDQ1ZSQUlaMTEQMA4GA1UECwwH
|
2686 |
-
UEtJQUNDVjENMAsGA1UECgwEQUNDVjELMAkGA1UEBhMCRVMwggIiMA0GCSqGSIb3DQEBAQUAA4IC
|
2687 |
-
DwAwggIKAoICAQCbqau/YUqXry+XZpp0X9DZlv3P4uRm7x8fRzPCRKPfmt4ftVTdFXxpNRFvu8gM
|
2688 |
-
jmoYHtiP2Ra8EEg2XPBjs5BaXCQ316PWywlxufEBcoSwfdtNgM3802/J+Nq2DoLSRYWoG2ioPej0
|
2689 |
-
RGy9ocLLA76MPhMAhN9KSMDjIgro6TenGEyxCQ0jVn8ETdkXhBilyNpAlHPrzg5XPAOBOp0KoVdD
|
2690 |
-
aaxXbXmQeOW1tDvYvEyNKKGno6e6Ak4l0Squ7a4DIrhrIA8wKFSVf+DuzgpmndFALW4ir50awQUZ
|
2691 |
-
0m/A8p/4e7MCQvtQqR0tkw8jq8bBD5L/0KIV9VMJcRz/RROE5iZe+OCIHAr8Fraocwa48GOEAqDG
|
2692 |
-
WuzndN9wrqODJerWx5eHk6fGioozl2A3ED6XPm4pFdahD9GILBKfb6qkxkLrQaLjlUPTAYVtjrs7
|
2693 |
-
8yM2x/474KElB0iryYl0/wiPgL/AlmXz7uxLaL2diMMxs0Dx6M/2OLuc5NF/1OVYm3z61PMOm3WR
|
2694 |
-
5LpSLhl+0fXNWhn8ugb2+1KoS5kE3fj5tItQo05iifCHJPqDQsGH+tUtKSpacXpkatcnYGMN285J
|
2695 |
-
9Y0fkIkyF/hzQ7jSWpOGYdbhdQrqeWZ2iE9x6wQl1gpaepPluUsXQA+xtrn13k/c4LOsOxFwYIRK
|
2696 |
-
Q26ZIMApcQrAZQIDAQABo4ICyzCCAscwfQYIKwYBBQUHAQEEcTBvMEwGCCsGAQUFBzAChkBodHRw
|
2697 |
-
Oi8vd3d3LmFjY3YuZXMvZmlsZWFkbWluL0FyY2hpdm9zL2NlcnRpZmljYWRvcy9yYWl6YWNjdjEu
|
2698 |
-
Y3J0MB8GCCsGAQUFBzABhhNodHRwOi8vb2NzcC5hY2N2LmVzMB0GA1UdDgQWBBTSh7Tj3zcnk1X2
|
2699 |
-
VuqB5TbMjB4/vTAPBgNVHRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFNKHtOPfNyeTVfZW6oHlNsyM
|
2700 |
-
Hj+9MIIBcwYDVR0gBIIBajCCAWYwggFiBgRVHSAAMIIBWDCCASIGCCsGAQUFBwICMIIBFB6CARAA
|
2701 |
-
QQB1AHQAbwByAGkAZABhAGQAIABkAGUAIABDAGUAcgB0AGkAZgBpAGMAYQBjAGkA8wBuACAAUgBh
|
2702 |
-
AO0AegAgAGQAZQAgAGwAYQAgAEEAQwBDAFYAIAAoAEEAZwBlAG4AYwBpAGEAIABkAGUAIABUAGUA
|
2703 |
-
YwBuAG8AbABvAGcA7QBhACAAeQAgAEMAZQByAHQAaQBmAGkAYwBhAGMAaQDzAG4AIABFAGwAZQBj
|
2704 |
-
AHQAcgDzAG4AaQBjAGEALAAgAEMASQBGACAAUQA0ADYAMAAxADEANQA2AEUAKQAuACAAQwBQAFMA
|
2705 |
-
IABlAG4AIABoAHQAdABwADoALwAvAHcAdwB3AC4AYQBjAGMAdgAuAGUAczAwBggrBgEFBQcCARYk
|
2706 |
-
aHR0cDovL3d3dy5hY2N2LmVzL2xlZ2lzbGFjaW9uX2MuaHRtMFUGA1UdHwROMEwwSqBIoEaGRGh0
|
2707 |
-
dHA6Ly93d3cuYWNjdi5lcy9maWxlYWRtaW4vQXJjaGl2b3MvY2VydGlmaWNhZG9zL3JhaXphY2N2
|
2708 |
-
MV9kZXIuY3JsMA4GA1UdDwEB/wQEAwIBBjAXBgNVHREEEDAOgQxhY2N2QGFjY3YuZXMwDQYJKoZI
|
2709 |
-
hvcNAQEFBQADggIBAJcxAp/n/UNnSEQU5CmH7UwoZtCPNdpNYbdKl02125DgBS4OxnnQ8pdpD70E
|
2710 |
-
R9m+27Up2pvZrqmZ1dM8MJP1jaGo/AaNRPTKFpV8M9xii6g3+CfYCS0b78gUJyCpZET/LtZ1qmxN
|
2711 |
-
YEAZSUNUY9rizLpm5U9EelvZaoErQNV/+QEnWCzI7UiRfD+mAM/EKXMRNt6GGT6d7hmKG9Ww7Y49
|
2712 |
-
nCrADdg9ZuM8Db3VlFzi4qc1GwQA9j9ajepDvV+JHanBsMyZ4k0ACtrJJ1vnE5Bc5PUzolVt3OAJ
|
2713 |
-
TS+xJlsndQAJxGJ3KQhfnlmstn6tn1QwIgPBHnFk/vk4CpYY3QIUrCPLBhwepH2NDd4nQeit2hW3
|
2714 |
-
sCPdK6jT2iWH7ehVRE2I9DZ+hJp4rPcOVkkO1jMl1oRQQmwgEh0q1b688nCBpHBgvgW1m54ERL5h
|
2715 |
-
I6zppSSMEYCUWqKiuUnSwdzRp+0xESyeGabu4VXhwOrPDYTkF7eifKXeVSUG7szAh1xA2syVP1Xg
|
2716 |
-
Nce4hL60Xc16gwFy7ofmXx2utYXGJt/mwZrpHgJHnyqobalbz+xFd3+YJ5oyXSrjhO7FmGYvliAd
|
2717 |
-
3djDJ9ew+f7Zfc3Qn48LFFhRny+Lwzgt3uiP1o2HpPVWQxaZLPSkVrQ0uGE3ycJYgBugl6H8WY3p
|
2718 |
-
EfbRD0tVNEYqi4Y7
|
2719 |
-
-----END CERTIFICATE-----
|
2720 |
-
|
2721 |
-
TWCA Global Root CA
|
2722 |
-
===================
|
2723 |
-
-----BEGIN CERTIFICATE-----
|
2724 |
-
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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-
zshNy/MGz19qCkKxHh53L46g5pIOBvwFItIm4TFRfTLcDwIDAQABoyMwITAOBgNVHQ8BAf8EBAMC
|
2738 |
-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
-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
-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
-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
-
/eTb6QihuJ49CcdP+yz4k3ZB3lLg4VfSnQO8d57+nile98FRYB/e2guyLXW3Q0iT5/Z5xoRdgFlg
|
2743 |
-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
-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
-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
-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
-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
|
2748 |
-
-----END CERTIFICATE-----
|
2749 |
-
|
2750 |
-
TeliaSonera Root CA v1
|
2751 |
-
======================
|
2752 |
-
-----BEGIN CERTIFICATE-----
|
2753 |
-
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
-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
-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
-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
-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
-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
-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
-
Xb88lxhTuylixcpecsHHltTbLaC0H2kD7OriUPEMPPCs81Mt8Bz17Ww5OXOAFshSsCPN4D7c3TxH
|
2761 |
-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
-
F0fUTPHSiXk+TT2YqGHeOh7S+F4D4MHJHIzTjU3TlTazN19jY5szFPAtJmtTfImMMsJu7D0hADnJ
|
2763 |
-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
-
gUY2BIbdeTXHlSw7sKMXNeVzH7RcWe/a6hBle3rQf5+ztCo3O3CLm1u5K7fsslESl1MpWtTwEhDc
|
2765 |
-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
-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
-
DNXr+nuqF+gTEjANBgkqhkiG9w0BAQUFAAOCAgEAvuRcYk4k9AwI//DTDGjkk0kiP0Qnb7tt3oNm
|
2768 |
-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
-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
-
pb/ImWvtxBnmq0wROMVvMeJuScg/doAmAyYp4Db29iBT4xdwNBedY2gea+zDTYa4EzAvXUYNR0PV
|
2771 |
-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
-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
-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
-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
-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
|
2776 |
-
WWFUyBy6ysHK4bkgTI86k4mloMy/0/Z1pHWWbVY=
|
2777 |
-
-----END CERTIFICATE-----
|
2778 |
-
|
2779 |
-
E-Tugra Certification Authority
|
2780 |
-
===============================
|
2781 |
-
-----BEGIN CERTIFICATE-----
|
2782 |
-
MIIGSzCCBDOgAwIBAgIIamg+nFGby1MwDQYJKoZIhvcNAQELBQAwgbIxCzAJBgNVBAYTAlRSMQ8w
|
2783 |
-
DQYDVQQHDAZBbmthcmExQDA+BgNVBAoMN0UtVHXEn3JhIEVCRyBCaWxpxZ9pbSBUZWtub2xvamls
|
2784 |
-
ZXJpIHZlIEhpem1ldGxlcmkgQS7Fni4xJjAkBgNVBAsMHUUtVHVncmEgU2VydGlmaWthc3lvbiBN
|
2785 |
-
ZXJrZXppMSgwJgYDVQQDDB9FLVR1Z3JhIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTEzMDMw
|
2786 |
-
NTEyMDk0OFoXDTIzMDMwMzEyMDk0OFowgbIxCzAJBgNVBAYTAlRSMQ8wDQYDVQQHDAZBbmthcmEx
|
2787 |
-
QDA+BgNVBAoMN0UtVHXEn3JhIEVCRyBCaWxpxZ9pbSBUZWtub2xvamlsZXJpIHZlIEhpem1ldGxl
|
2788 |
-
cmkgQS7Fni4xJjAkBgNVBAsMHUUtVHVncmEgU2VydGlmaWthc3lvbiBNZXJrZXppMSgwJgYDVQQD
|
2789 |
-
DB9FLVR1Z3JhIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIICIjANBgkqhkiG9w0BAQEFAAOCAg8A
|
2790 |
-
MIICCgKCAgEA4vU/kwVRHoViVF56C/UYB4Oufq9899SKa6VjQzm5S/fDxmSJPZQuVIBSOTkHS0vd
|
2791 |
-
hQd2h8y/L5VMzH2nPbxHD5hw+IyFHnSOkm0bQNGZDbt1bsipa5rAhDGvykPL6ys06I+XawGb1Q5K
|
2792 |
-
CKpbknSFQ9OArqGIW66z6l7LFpp3RMih9lRozt6Plyu6W0ACDGQXwLWTzeHxE2bODHnv0ZEoq1+g
|
2793 |
-
ElIwcxmOj+GMB6LDu0rw6h8VqO4lzKRG+Bsi77MOQ7osJLjFLFzUHPhdZL3Dk14opz8n8Y4e0ypQ
|
2794 |
-
BaNV2cvnOVPAmJ6MVGKLJrD3fY185MaeZkJVgkfnsliNZvcHfC425lAcP9tDJMW/hkd5s3kc91r0
|
2795 |
-
E+xs+D/iWR+V7kI+ua2oMoVJl0b+SzGPWsutdEcf6ZG33ygEIqDUD13ieU/qbIWGvaimzuT6w+Gz
|
2796 |
-
rt48Ue7LE3wBf4QOXVGUnhMMti6lTPk5cDZvlsouDERVxcr6XQKj39ZkjFqzAQqptQpHF//vkUAq
|
2797 |
-
jqFGOjGY5RH8zLtJVor8udBhmm9lbObDyz51Sf6Pp+KJxWfXnUYTTjF2OySznhFlhqt/7x3U+Lzn
|
2798 |
-
rFpct1pHXFXOVbQicVtbC/DP3KBhZOqp12gKY6fgDT+gr9Oq0n7vUaDmUStVkhUXU8u3Zg5mTPj5
|
2799 |
-
dUyQ5xJwx0UCAwEAAaNjMGEwHQYDVR0OBBYEFC7j27JJ0JxUeVz6Jyr+zE7S6E5UMA8GA1UdEwEB
|
2800 |
-
/wQFMAMBAf8wHwYDVR0jBBgwFoAULuPbsknQnFR5XPonKv7MTtLoTlQwDgYDVR0PAQH/BAQDAgEG
|
2801 |
-
MA0GCSqGSIb3DQEBCwUAA4ICAQAFNzr0TbdF4kV1JI+2d1LoHNgQk2Xz8lkGpD4eKexd0dCrfOAK
|
2802 |
-
kEh47U6YA5n+KGCRHTAduGN8qOY1tfrTYXbm1gdLymmasoR6d5NFFxWfJNCYExL/u6Au/U5Mh/jO
|
2803 |
-
XKqYGwXgAEZKgoClM4so3O0409/lPun++1ndYYRP0lSWE2ETPo+Aab6TR7U1Q9Jauz1c77NCR807
|
2804 |
-
VRMGsAnb/WP2OogKmW9+4c4bU2pEZiNRCHu8W1Ki/QY3OEBhj0qWuJA3+GbHeJAAFS6LrVE1Uweo
|
2805 |
-
a2iu+U48BybNCAVwzDk/dr2l02cmAYamU9JgO3xDf1WKvJUawSg5TB9D0pH0clmKuVb8P7Sd2nCc
|
2806 |
-
dlqMQ1DujjByTd//SffGqWfZbawCEeI6FiWnWAjLb1NBnEg4R2gz0dfHj9R0IdTDBZB6/86WiLEV
|
2807 |
-
KV0jq9BgoRJP3vQXzTLlyb/IQ639Lo7xr+L0mPoSHyDYwKcMhcWQ9DstliaxLL5Mq+ux0orJ23gT
|
2808 |
-
Dx4JnW2PAJ8C2sH6H3p6CcRK5ogql5+Ji/03X186zjhZhkuvcQu02PJwT58yE+Owp1fl2tpDy4Q0
|
2809 |
-
8ijE6m30Ku/Ba3ba+367hTzSU8JNvnHhRdH9I2cNE3X7z2VnIp2usAnRCf8dNL/+I5c30jn6PQ0G
|
2810 |
-
C7TbO6Orb1wdtn7os4I07QZcJA==
|
2811 |
-
-----END CERTIFICATE-----
|
2812 |
-
|
2813 |
-
T-TeleSec GlobalRoot Class 2
|
2814 |
-
============================
|
2815 |
-
-----BEGIN CERTIFICATE-----
|
2816 |
-
MIIDwzCCAqugAwIBAgIBATANBgkqhkiG9w0BAQsFADCBgjELMAkGA1UEBhMCREUxKzApBgNVBAoM
|
2817 |
-
IlQtU3lzdGVtcyBFbnRlcnByaXNlIFNlcnZpY2VzIEdtYkgxHzAdBgNVBAsMFlQtU3lzdGVtcyBU
|
2818 |
-
cnVzdCBDZW50ZXIxJTAjBgNVBAMMHFQtVGVsZVNlYyBHbG9iYWxSb290IENsYXNzIDIwHhcNMDgx
|
2819 |
-
MDAxMTA0MDE0WhcNMzMxMDAxMjM1OTU5WjCBgjELMAkGA1UEBhMCREUxKzApBgNVBAoMIlQtU3lz
|
2820 |
-
dGVtcyBFbnRlcnByaXNlIFNlcnZpY2VzIEdtYkgxHzAdBgNVBAsMFlQtU3lzdGVtcyBUcnVzdCBD
|
2821 |
-
ZW50ZXIxJTAjBgNVBAMMHFQtVGVsZVNlYyBHbG9iYWxSb290IENsYXNzIDIwggEiMA0GCSqGSIb3
|
2822 |
-
DQEBAQUAA4IBDwAwggEKAoIBAQCqX9obX+hzkeXaXPSi5kfl82hVYAUdAqSzm1nzHoqvNK38DcLZ
|
2823 |
-
SBnuaY/JIPwhqgcZ7bBcrGXHX+0CfHt8LRvWurmAwhiCFoT6ZrAIxlQjgeTNuUk/9k9uN0goOA/F
|
2824 |
-
vudocP05l03Sx5iRUKrERLMjfTlH6VJi1hKTXrcxlkIF+3anHqP1wvzpesVsqXFP6st4vGCvx970
|
2825 |
-
2cu+fjOlbpSD8DT6IavqjnKgP6TeMFvvhk1qlVtDRKgQFRzlAVfFmPHmBiiRqiDFt1MmUUOyCxGV
|
2826 |
-
WOHAD3bZwI18gfNycJ5v/hqO2V81xrJvNHy+SE/iWjnX2J14np+GPgNeGYtEotXHAgMBAAGjQjBA
|
2827 |
-
MA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBS/WSA2AHmgoCJrjNXy
|
2828 |
-
YdK4LMuCSjANBgkqhkiG9w0BAQsFAAOCAQEAMQOiYQsfdOhyNsZt+U2e+iKo4YFWz827n+qrkRk4
|
2829 |
-
r6p8FU3ztqONpfSO9kSpp+ghla0+AGIWiPACuvxhI+YzmzB6azZie60EI4RYZeLbK4rnJVM3YlNf
|
2830 |
-
vNoBYimipidx5joifsFvHZVwIEoHNN/q/xWA5brXethbdXwFeilHfkCoMRN3zUA7tFFHei4R40cR
|
2831 |
-
3p1m0IvVVGb6g1XqfMIpiRvpb7PO4gWEyS8+eIVibslfwXhjdFjASBgMmTnrpMwatXlajRWc2BQN
|
2832 |
-
9noHV8cigwUtPJslJj0Ys6lDfMjIq2SPDqO/nBudMNva0Bkuqjzx+zOAduTNrRlPBSeOE6Fuwg==
|
2833 |
-
-----END CERTIFICATE-----
|
2834 |
-
|
2835 |
-
Atos TrustedRoot 2011
|
2836 |
-
=====================
|
2837 |
-
-----BEGIN CERTIFICATE-----
|
2838 |
-
MIIDdzCCAl+gAwIBAgIIXDPLYixfszIwDQYJKoZIhvcNAQELBQAwPDEeMBwGA1UEAwwVQXRvcyBU
|
2839 |
-
cnVzdGVkUm9vdCAyMDExMQ0wCwYDVQQKDARBdG9zMQswCQYDVQQGEwJERTAeFw0xMTA3MDcxNDU4
|
2840 |
-
MzBaFw0zMDEyMzEyMzU5NTlaMDwxHjAcBgNVBAMMFUF0b3MgVHJ1c3RlZFJvb3QgMjAxMTENMAsG
|
2841 |
-
A1UECgwEQXRvczELMAkGA1UEBhMCREUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCV
|
2842 |
-
hTuXbyo7LjvPpvMpNb7PGKw+qtn4TaA+Gke5vJrf8v7MPkfoepbCJI419KkM/IL9bcFyYie96mvr
|
2843 |
-
54rMVD6QUM+A1JX76LWC1BTFtqlVJVfbsVD2sGBkWXppzwO3bw2+yj5vdHLqqjAqc2K+SZFhyBH+
|
2844 |
-
DgMq92og3AIVDV4VavzjgsG1xZ1kCWyjWZgHJ8cblithdHFsQ/H3NYkQ4J7sVaE3IqKHBAUsR320
|
2845 |
-
HLliKWYoyrfhk/WklAOZuXCFteZI6o1Q/NnezG8HDt0Lcp2AMBYHlT8oDv3FdU9T1nSatCQujgKR
|
2846 |
-
z3bFmx5VdJx4IbHwLfELn8LVlhgf8FQieowHAgMBAAGjfTB7MB0GA1UdDgQWBBSnpQaxLKYJYO7R
|
2847 |
-
l+lwrrw7GWzbITAPBgNVHRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFKelBrEspglg7tGX6XCuvDsZ
|
2848 |
-
bNshMBgGA1UdIAQRMA8wDQYLKwYBBAGwLQMEAQEwDgYDVR0PAQH/BAQDAgGGMA0GCSqGSIb3DQEB
|
2849 |
-
CwUAA4IBAQAmdzTblEiGKkGdLD4GkGDEjKwLVLgfuXvTBznk+j57sj1O7Z8jvZfza1zv7v1Apt+h
|
2850 |
-
k6EKhqzvINB5Ab149xnYJDE0BAGmuhWawyfc2E8PzBhj/5kPDpFrdRbhIfzYJsdHt6bPWHJxfrrh
|
2851 |
-
TZVHO8mvbaG0weyJ9rQPOLXiZNwlz6bb65pcmaHFCN795trV1lpFDMS3wrUU77QR/w4VtfX128a9
|
2852 |
-
61qn8FYiqTxlVMYVqL2Gns2Dlmh6cYGJ4Qvh6hEbaAjMaZ7snkGeRDImeuKHCnE96+RapNLbxc3G
|
2853 |
-
3mB/ufNPRJLvKrcYPqcZ2Qt9sTdBQrC6YB3y/gkRsPCHe6ed
|
2854 |
-
-----END CERTIFICATE-----
|
2855 |
-
|
2856 |
-
QuoVadis Root CA 1 G3
|
2857 |
-
=====================
|
2858 |
-
-----BEGIN CERTIFICATE-----
|
2859 |
-
MIIFYDCCA0igAwIBAgIUeFhfLq0sGUvjNwc1NBMotZbUZZMwDQYJKoZIhvcNAQELBQAwSDELMAkG
|
2860 |
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-
+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
-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
-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
-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
-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
|
2883 |
-
hMJKzRwuJIczYOXD
|
2884 |
-
-----END CERTIFICATE-----
|
2885 |
-
|
2886 |
-
QuoVadis Root CA 2 G3
|
2887 |
-
=====================
|
2888 |
-
-----BEGIN CERTIFICATE-----
|
2889 |
-
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
-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
-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
-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
-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
-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
-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
-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
-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
-
V0POKa2Mq1W/xPtbAd0jIaFYAI7D0GoT7RPjEiuA3GfmlbLNHiJuKvhB1PLKFAeNilUSxmn1uIZo
|
2899 |
-
L1NesNKqIcGY5jDjZ1XHm26sGahVpkUG0CM62+tlXSoREfA7T8pt9DTEceT/AFr2XK4jYIVz8eQQ
|
2900 |
-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
-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
-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
-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
-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
-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
-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
-
x52ID8DyeAIkVJOviYeIyUqAHerQbj5hLja7NQ4nlv1mNDthcnPxFlxHBlRJAHpYErAK74X9sbgz
|
2908 |
-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
-
U/IyAgkwo1jwDQHVcsaxfGl7w/U2Rcxhbl5MlMVerugOXou/983g7aEOGzPuVBj+D77vfoRrQ+Nw
|
2910 |
-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
-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
-
JeV3UvQDHEimUF+IIDBu8oJDqz2XhOdT+yHBTw8imoa4WSr2Rz0ZiC3oheGe7IUIarFsNMkd7Egr
|
2913 |
-
O3jtZsSOeWmD3n+M
|
2914 |
-
-----END CERTIFICATE-----
|
2915 |
-
|
2916 |
-
QuoVadis Root CA 3 G3
|
2917 |
-
=====================
|
2918 |
-
-----BEGIN CERTIFICATE-----
|
2919 |
-
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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-
t/Ac5IYp8M7vaGPQtSCKFWGafoaYtMnCdvvMujAWzKNhxnQT5WvvoxXqA/4Ti2Tk08HS6IT7SdEQ
|
2937 |
-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
-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
-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
-
hPbl8MFREsALHgQjDFSlTC9JxUrRtm5gDWv8a4uFJGS3iQ6rJUdbPM9+Sb3H6QrG2vd+DhcI00iX
|
2941 |
-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
-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
|
2943 |
-
PpxxVJkES/1Y+Zj0
|
2944 |
-
-----END CERTIFICATE-----
|
2945 |
-
|
2946 |
-
DigiCert Assured ID Root G2
|
2947 |
-
===========================
|
2948 |
-
-----BEGIN CERTIFICATE-----
|
2949 |
-
MIIDljCCAn6gAwIBAgIQC5McOtY5Z+pnI7/Dr5r0SzANBgkqhkiG9w0BAQsFADBlMQswCQYDVQQG
|
2950 |
-
EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSQw
|
2951 |
-
IgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgRzIwHhcNMTMwODAxMTIwMDAwWhcNMzgw
|
2952 |
-
MTE1MTIwMDAwWjBlMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQL
|
2953 |
-
ExB3d3cuZGlnaWNlcnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgRzIw
|
2954 |
-
ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDZ5ygvUj82ckmIkzTz+GoeMVSAn61UQbVH
|
2955 |
-
35ao1K+ALbkKz3X9iaV9JPrjIgwrvJUXCzO/GU1BBpAAvQxNEP4HteccbiJVMWWXvdMX0h5i89vq
|
2956 |
-
bFCMP4QMls+3ywPgym2hFEwbid3tALBSfK+RbLE4E9HpEgjAALAcKxHad3A2m67OeYfcgnDmCXRw
|
2957 |
-
VWmvo2ifv922ebPynXApVfSr/5Vh88lAbx3RvpO704gqu52/clpWcTs/1PPRCv4o76Pu2ZmvA9OP
|
2958 |
-
YLfykqGxvYmJHzDNw6YuYjOuFgJ3RFrngQo8p0Quebg/BLxcoIfhG69Rjs3sLPr4/m3wOnyqi+Rn
|
2959 |
-
lTGNAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgGGMB0GA1UdDgQWBBTO
|
2960 |
-
w0q5mVXyuNtgv6l+vVa1lzan1jANBgkqhkiG9w0BAQsFAAOCAQEAyqVVjOPIQW5pJ6d1Ee88hjZv
|
2961 |
-
0p3GeDgdaZaikmkuOGybfQTUiaWxMTeKySHMq2zNixya1r9I0jJmwYrA8y8678Dj1JGG0VDjA9tz
|
2962 |
-
d29KOVPt3ibHtX2vK0LRdWLjSisCx1BL4GnilmwORGYQRI+tBev4eaymG+g3NJ1TyWGqolKvSnAW
|
2963 |
-
hsI6yLETcDbYz+70CjTVW0z9B5yiutkBclzzTcHdDrEcDcRjvq30FPuJ7KJBDkzMyFdA0G4Dqs0M
|
2964 |
-
jomZmWzwPDCvON9vvKO+KSAnq3T/EyJ43pdSVR6DtVQgA+6uwE9W3jfMw3+qBCe703e4YtsXfJwo
|
2965 |
-
IhNzbM8m9Yop5w==
|
2966 |
-
-----END CERTIFICATE-----
|
2967 |
-
|
2968 |
-
DigiCert Assured ID Root G3
|
2969 |
-
===========================
|
2970 |
-
-----BEGIN CERTIFICATE-----
|
2971 |
-
MIICRjCCAc2gAwIBAgIQC6Fa+h3foLVJRK/NJKBs7DAKBggqhkjOPQQDAzBlMQswCQYDVQQGEwJV
|
2972 |
-
UzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSQwIgYD
|
2973 |
-
VQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgRzMwHhcNMTMwODAxMTIwMDAwWhcNMzgwMTE1
|
2974 |
-
MTIwMDAwWjBlMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3
|
2975 |
-
d3cuZGlnaWNlcnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgRzMwdjAQ
|
2976 |
-
BgcqhkjOPQIBBgUrgQQAIgNiAAQZ57ysRGXtzbg/WPuNsVepRC0FFfLvC/8QdJ+1YlJfZn4f5dwb
|
2977 |
-
RXkLzMZTCp2NXQLZqVneAlr2lSoOjThKiknGvMYDOAdfVdp+CW7if17QRSAPWXYQ1qAk8C3eNvJs
|
2978 |
-
KTmjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgGGMB0GA1UdDgQWBBTL0L2p4ZgF
|
2979 |
-
UaFNN6KDec6NHSrkhDAKBggqhkjOPQQDAwNnADBkAjAlpIFFAmsSS3V0T8gj43DydXLefInwz5Fy
|
2980 |
-
YZ5eEJJZVrmDxxDnOOlYJjZ91eQ0hjkCMHw2U/Aw5WJjOpnitqM7mzT6HtoQknFekROn3aRukswy
|
2981 |
-
1vUhZscv6pZjamVFkpUBtA==
|
2982 |
-
-----END CERTIFICATE-----
|
2983 |
-
|
2984 |
-
DigiCert Global Root G2
|
2985 |
-
=======================
|
2986 |
-
-----BEGIN CERTIFICATE-----
|
2987 |
-
MIIDjjCCAnagAwIBAgIQAzrx5qcRqaC7KGSxHQn65TANBgkqhkiG9w0BAQsFADBhMQswCQYDVQQG
|
2988 |
-
EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSAw
|
2989 |
-
HgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBHMjAeFw0xMzA4MDExMjAwMDBaFw0zODAxMTUx
|
2990 |
-
MjAwMDBaMGExCzAJBgNVBAYTAlVTMRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3
|
2991 |
-
dy5kaWdpY2VydC5jb20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IEcyMIIBIjANBgkq
|
2992 |
-
hkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAuzfNNNx7a8myaJCtSnX/RrohCgiN9RlUyfuI2/Ou8jqJ
|
2993 |
-
kTx65qsGGmvPrC3oXgkkRLpimn7Wo6h+4FR1IAWsULecYxpsMNzaHxmx1x7e/dfgy5SDN67sH0NO
|
2994 |
-
3Xss0r0upS/kqbitOtSZpLYl6ZtrAGCSYP9PIUkY92eQq2EGnI/yuum06ZIya7XzV+hdG82MHauV
|
2995 |
-
BJVJ8zUtluNJbd134/tJS7SsVQepj5WztCO7TG1F8PapspUwtP1MVYwnSlcUfIKdzXOS0xZKBgyM
|
2996 |
-
UNGPHgm+F6HmIcr9g+UQvIOlCsRnKPZzFBQ9RnbDhxSJITRNrw9FDKZJobq7nMWxM4MphQIDAQAB
|
2997 |
-
o0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBhjAdBgNVHQ4EFgQUTiJUIBiV5uNu
|
2998 |
-
5g/6+rkS7QYXjzkwDQYJKoZIhvcNAQELBQADggEBAGBnKJRvDkhj6zHd6mcY1Yl9PMWLSn/pvtsr
|
2999 |
-
F9+wX3N3KjITOYFnQoQj8kVnNeyIv/iPsGEMNKSuIEyExtv4NeF22d+mQrvHRAiGfzZ0JFrabA0U
|
3000 |
-
WTW98kndth/Jsw1HKj2ZL7tcu7XUIOGZX1NGFdtom/DzMNU+MeKNhJ7jitralj41E6Vf8PlwUHBH
|
3001 |
-
QRFXGU7Aj64GxJUTFy8bJZ918rGOmaFvE7FBcf6IKshPECBV1/MUReXgRPTqh5Uykw7+U0b6LJ3/
|
3002 |
-
iyK5S9kJRaTepLiaWN0bfVKfjllDiIGknibVb63dDcY3fe0Dkhvld1927jyNxF1WW6LZZm6zNTfl
|
3003 |
-
MrY=
|
3004 |
-
-----END CERTIFICATE-----
|
3005 |
-
|
3006 |
-
DigiCert Global Root G3
|
3007 |
-
=======================
|
3008 |
-
-----BEGIN CERTIFICATE-----
|
3009 |
-
MIICPzCCAcWgAwIBAgIQBVVWvPJepDU1w6QP1atFcjAKBggqhkjOPQQDAzBhMQswCQYDVQQGEwJV
|
3010 |
-
UzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSAwHgYD
|
3011 |
-
VQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBHMzAeFw0xMzA4MDExMjAwMDBaFw0zODAxMTUxMjAw
|
3012 |
-
MDBaMGExCzAJBgNVBAYTAlVTMRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5k
|
3013 |
-
aWdpY2VydC5jb20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IEczMHYwEAYHKoZIzj0C
|
3014 |
-
AQYFK4EEACIDYgAE3afZu4q4C/sLfyHS8L6+c/MzXRq8NOrexpu80JX28MzQC7phW1FGfp4tn+6O
|
3015 |
-
YwwX7Adw9c+ELkCDnOg/QW07rdOkFFk2eJ0DQ+4QE2xy3q6Ip6FrtUPOZ9wj/wMco+I+o0IwQDAP
|
3016 |
-
BgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBhjAdBgNVHQ4EFgQUs9tIpPmhxdiuNkHMEWNp
|
3017 |
-
Yim8S8YwCgYIKoZIzj0EAwMDaAAwZQIxAK288mw/EkrRLTnDCgmXc/SINoyIJ7vmiI1Qhadj+Z4y
|
3018 |
-
3maTD/HMsQmP3Wyr+mt/oAIwOWZbwmSNuJ5Q3KjVSaLtx9zRSX8XAbjIho9OjIgrqJqpisXRAL34
|
3019 |
-
VOKa5Vt8sycX
|
3020 |
-
-----END CERTIFICATE-----
|
3021 |
-
|
3022 |
-
DigiCert Trusted Root G4
|
3023 |
-
========================
|
3024 |
-
-----BEGIN CERTIFICATE-----
|
3025 |
-
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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-
mnTK3kse5w5jrubU75KSOp493ADkRSWJtppEGSt+wJS00mFt6zPZxd9LBADMfRyVw4/3IbKyEbe7
|
3037 |
-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
-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
-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
-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
-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
-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
-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
-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
-
ixTXTBmyUEFxPT9NcCOGDErcgdLMMpSEDQgJlxxPwO5rIHQw0uA5NBCFIRUBCOhVMt5xSdkoF1BN
|
3046 |
-
5r5N0XWs0Mr7QbhDparTwwVETyw2m+L64kW4I1NsBm9nVX9GtUw/bihaeSbSpKhil9Ie4u1Ki7wb
|
3047 |
-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
-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
-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
|
3050 |
-
82Z+
|
3051 |
-
-----END CERTIFICATE-----
|
3052 |
-
|
3053 |
-
COMODO RSA Certification Authority
|
3054 |
-
==================================
|
3055 |
-
-----BEGIN CERTIFICATE-----
|
3056 |
-
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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-
WdYgGq/yapiqcrxXStJLnbsQ/LBMQeXtHT1eKJ2czL+zUdqnR+WEUwIDAQABo0IwQDAdBgNVHQ4E
|
3072 |
-
FgQUu69+Aj36pvE8hI6t7jiY7NkyMtQwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8w
|
3073 |
-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
-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
-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
-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
-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
-
pC3n9KUkEEeDys30jXlYsQab5xoq2Z0B15R97QNKyvDb6KkBPvVWmckejkk9u+UJueBPSZI9FoJA
|
3079 |
-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
-
ZJx64SIDqZxubw5lT2yHh17zbqD5daWbQOhTsiedSrnAdyGN/4fy3ryM7xfft0kL0fJuMAsaDk52
|
3081 |
-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
|
3082 |
-
LaZRfyHBNVOFBkpdn627G190
|
3083 |
-
-----END CERTIFICATE-----
|
3084 |
-
|
3085 |
-
USERTrust RSA Certification Authority
|
3086 |
-
=====================================
|
3087 |
-
-----BEGIN CERTIFICATE-----
|
3088 |
-
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
-
BhMCVVMxEzARBgNVBAgTCk5ldyBKZXJzZXkxFDASBgNVBAcTC0plcnNleSBDaXR5MR4wHAYDVQQK
|
3090 |
-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
-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
-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
-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
-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
-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
-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
-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
-
+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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-
FSeUHM9h4ya7b6NnJSFd5t0dCy5oGzuCr+yDZ4XUmFF0sbmZgIn/f3gZXHlKYC6SQK5MNyosycdi
|
3111 |
-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
-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
-
sAvgnEzDHNb842m1R0aBL6KCq9NjRHDEjf8tM7qtj3u1cIiuPhnPQCjY/MiQu12ZIvVS5ljFH4gx
|
3114 |
-
Q+6IHdfGjjxDah2nGN59PRbxYvnKkKj9
|
3115 |
-
-----END CERTIFICATE-----
|
3116 |
-
|
3117 |
-
USERTrust ECC Certification Authority
|
3118 |
-
=====================================
|
3119 |
-
-----BEGIN CERTIFICATE-----
|
3120 |
-
MIICjzCCAhWgAwIBAgIQXIuZxVqUxdJxVt7NiYDMJjAKBggqhkjOPQQDAzCBiDELMAkGA1UEBhMC
|
3121 |
-
VVMxEzARBgNVBAgTCk5ldyBKZXJzZXkxFDASBgNVBAcTC0plcnNleSBDaXR5MR4wHAYDVQQKExVU
|
3122 |
-
aGUgVVNFUlRSVVNUIE5ldHdvcmsxLjAsBgNVBAMTJVVTRVJUcnVzdCBFQ0MgQ2VydGlmaWNhdGlv
|
3123 |
-
biBBdXRob3JpdHkwHhcNMTAwMjAxMDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCBiDELMAkGA1UEBhMC
|
3124 |
-
VVMxEzARBgNVBAgTCk5ldyBKZXJzZXkxFDASBgNVBAcTC0plcnNleSBDaXR5MR4wHAYDVQQKExVU
|
3125 |
-
aGUgVVNFUlRSVVNUIE5ldHdvcmsxLjAsBgNVBAMTJVVTRVJUcnVzdCBFQ0MgQ2VydGlmaWNhdGlv
|
3126 |
-
biBBdXRob3JpdHkwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAAQarFRaqfloI+d61SRvU8Za2EurxtW2
|
3127 |
-
0eZzca7dnNYMYf3boIkDuAUU7FfO7l0/4iGzzvfUinngo4N+LZfQYcTxmdwlkWOrfzCjtHDix6Ez
|
3128 |
-
nPO/LlxTsV+zfTJ/ijTjeXmjQjBAMB0GA1UdDgQWBBQ64QmG1M8ZwpZ2dEl23OA1xmNjmjAOBgNV
|
3129 |
-
HQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAKBggqhkjOPQQDAwNoADBlAjA2Z6EWCNzklwBB
|
3130 |
-
HU6+4WMBzzuqQhFkoJ2UOQIReVx7Hfpkue4WQrO/isIJxOzksU0CMQDpKmFHjFJKS04YcPbWRNZu
|
3131 |
-
9YO6bVi9JNlWSOrvxKJGgYhqOkbRqZtNyWHa0V1Xahg=
|
3132 |
-
-----END CERTIFICATE-----
|
3133 |
-
|
3134 |
-
GlobalSign ECC Root CA - R4
|
3135 |
-
===========================
|
3136 |
-
-----BEGIN CERTIFICATE-----
|
3137 |
-
MIIB4TCCAYegAwIBAgIRKjikHJYKBN5CsiilC+g0mAIwCgYIKoZIzj0EAwIwUDEkMCIGA1UECxMb
|
3138 |
-
R2xvYmFsU2lnbiBFQ0MgUm9vdCBDQSAtIFI0MRMwEQYDVQQKEwpHbG9iYWxTaWduMRMwEQYDVQQD
|
3139 |
-
EwpHbG9iYWxTaWduMB4XDTEyMTExMzAwMDAwMFoXDTM4MDExOTAzMTQwN1owUDEkMCIGA1UECxMb
|
3140 |
-
R2xvYmFsU2lnbiBFQ0MgUm9vdCBDQSAtIFI0MRMwEQYDVQQKEwpHbG9iYWxTaWduMRMwEQYDVQQD
|
3141 |
-
EwpHbG9iYWxTaWduMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEuMZ5049sJQ6fLjkZHAOkrprl
|
3142 |
-
OQcJFspjsbmG+IpXwVfOQvpzofdlQv8ewQCybnMO/8ch5RikqtlxP6jUuc6MHaNCMEAwDgYDVR0P
|
3143 |
-
AQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFFSwe61FuOJAf/sKbvu+M8k8o4TV
|
3144 |
-
MAoGCCqGSM49BAMCA0gAMEUCIQDckqGgE6bPA7DmxCGXkPoUVy0D7O48027KqGx2vKLeuwIgJ6iF
|
3145 |
-
JzWbVsaj8kfSt24bAgAXqmemFZHe+pTsewv4n4Q=
|
3146 |
-
-----END CERTIFICATE-----
|
3147 |
-
|
3148 |
-
GlobalSign ECC Root CA - R5
|
3149 |
-
===========================
|
3150 |
-
-----BEGIN CERTIFICATE-----
|
3151 |
-
MIICHjCCAaSgAwIBAgIRYFlJ4CYuu1X5CneKcflK2GwwCgYIKoZIzj0EAwMwUDEkMCIGA1UECxMb
|
3152 |
-
R2xvYmFsU2lnbiBFQ0MgUm9vdCBDQSAtIFI1MRMwEQYDVQQKEwpHbG9iYWxTaWduMRMwEQYDVQQD
|
3153 |
-
EwpHbG9iYWxTaWduMB4XDTEyMTExMzAwMDAwMFoXDTM4MDExOTAzMTQwN1owUDEkMCIGA1UECxMb
|
3154 |
-
R2xvYmFsU2lnbiBFQ0MgUm9vdCBDQSAtIFI1MRMwEQYDVQQKEwpHbG9iYWxTaWduMRMwEQYDVQQD
|
3155 |
-
EwpHbG9iYWxTaWduMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAER0UOlvt9Xb/pOdEh+J8LttV7HpI6
|
3156 |
-
SFkc8GIxLcB6KP4ap1yztsyX50XUWPrRd21DosCHZTQKH3rd6zwzocWdTaRvQZU4f8kehOvRnkmS
|
3157 |
-
h5SHDDqFSmafnVmTTZdhBoZKo0IwQDAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAd
|
3158 |
-
BgNVHQ4EFgQUPeYpSJvqB8ohREom3m7e0oPQn1kwCgYIKoZIzj0EAwMDaAAwZQIxAOVpEslu28Yx
|
3159 |
-
uglB4Zf4+/2a4n0Sye18ZNPLBSWLVtmg515dTguDnFt2KaAJJiFqYgIwcdK1j1zqO+F4CYWodZI7
|
3160 |
-
yFz9SO8NdCKoCOJuxUnOxwy8p2Fp8fc74SrL+SvzZpA3
|
3161 |
-
-----END CERTIFICATE-----
|
3162 |
-
|
3163 |
-
Staat der Nederlanden Root CA - G3
|
3164 |
-
==================================
|
3165 |
-
-----BEGIN CERTIFICATE-----
|
3166 |
-
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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-
FxcHErVc0qsgk7TmgoNwNsXNo42ti+yjwUOH5kPiNL6VizXtBznaqB16nzaeErAMZRKQFWDZJkBE
|
3179 |
-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
-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
-
yjWcLhL75LpdINyUVzANBgkqhkiG9w0BAQsFAAOCAgEAMJmdBTLIXg47mAE6iqTnB/d6+Oea31BD
|
3182 |
-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
-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
-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
-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
-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
-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
-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
-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
-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
|
3191 |
-
-----END CERTIFICATE-----
|
3192 |
-
|
3193 |
-
Staat der Nederlanden EV Root CA
|
3194 |
-
================================
|
3195 |
-
-----BEGIN CERTIFICATE-----
|
3196 |
-
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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-
74K74bzickFbIZTTRTeU0d8JOV3nI6qaHcptqAqGhYqCvkIH1vI4gnPah1vlPNOePqc7nvQDs/nx
|
3209 |
-
fRN0Av+7oeX6AHkcpmZBiFxgV6YuCcS6/ZrPpx9Aw7vMWgpVSzs4dlG4Y4uElBbmVvMCAwEAAaNC
|
3210 |
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
|
3220 |
-
eUN51q1veieQA6TqJIc/2b3Z6fJfUEkc7uzXLg==
|
3221 |
-
-----END CERTIFICATE-----
|
3222 |
-
|
3223 |
-
IdenTrust Commercial Root CA 1
|
3224 |
-
==============================
|
3225 |
-
-----BEGIN CERTIFICATE-----
|
3226 |
-
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
-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
-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
-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
-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
-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
-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
-
1CxUAGc1bnO/AljwpN3lsKImesrgNqUZFvX9t++uP0D1bVoE/c40yiTcdCMbXTMTEl3EASX2MN0C
|
3234 |
-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
-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
-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
-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
-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
-
uuFucAS6T6C6aMN7/zHwcz09lCqxC0EOoP5NiGVreTO01wIDAQABo0IwQDAOBgNVHQ8BAf8EBAMC
|
3240 |
-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
-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
-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
-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
-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
-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
-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
-
kTLql1gEIt44w8y8bckzOmoKaT+gyOpyj4xjhiO9bTyWnpXgSUyqorkqG5w2gXjtw+hG4iZZRHUe
|
3248 |
-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
-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
|
3250 |
-
cGzM7vRX+Bi6hG6H
|
3251 |
-
-----END CERTIFICATE-----
|
3252 |
-
|
3253 |
-
IdenTrust Public Sector Root CA 1
|
3254 |
-
=================================
|
3255 |
-
-----BEGIN CERTIFICATE-----
|
3256 |
-
MIIFZjCCA06gAwIBAgIQCgFCgAAAAUUjz0Z8AAAAAjANBgkqhkiG9w0BAQsFADBNMQswCQYDVQQG
|
3257 |
-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
-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
-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
-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
-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
-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
-
rcuVIKQxKFdYWuSNG5qrng0M8gozOSI5Cpcu81N3uURF/YTLNiCBWS2ab21ISGHKTN9T0a9SvESf
|
3264 |
-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
-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
-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
-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
-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
-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
-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
-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
-
t2odIFflAWJBF9MJ23XLblSQdf4an4EKwt3X9wnQW3IV5B4Jaj0z8yGa5hV+rVHVDRDtfULAj+7A
|
3273 |
-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
-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
-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
-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
-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
-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
-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
|
3280 |
-
3Wl9af0AVqW3rLatt8o+Ae+c
|
3281 |
-
-----END CERTIFICATE-----
|
3282 |
-
|
3283 |
-
Entrust Root Certification Authority - G2
|
3284 |
-
=========================================
|
3285 |
-
-----BEGIN CERTIFICATE-----
|
3286 |
-
MIIEPjCCAyagAwIBAgIESlOMKDANBgkqhkiG9w0BAQsFADCBvjELMAkGA1UEBhMCVVMxFjAUBgNV
|
3287 |
-
BAoTDUVudHJ1c3QsIEluYy4xKDAmBgNVBAsTH1NlZSB3d3cuZW50cnVzdC5uZXQvbGVnYWwtdGVy
|
3288 |
-
bXMxOTA3BgNVBAsTMChjKSAyMDA5IEVudHJ1c3QsIEluYy4gLSBmb3IgYXV0aG9yaXplZCB1c2Ug
|
3289 |
-
b25seTEyMDAGA1UEAxMpRW50cnVzdCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IC0gRzIw
|
3290 |
-
HhcNMDkwNzA3MTcyNTU0WhcNMzAxMjA3MTc1NTU0WjCBvjELMAkGA1UEBhMCVVMxFjAUBgNVBAoT
|
3291 |
-
DUVudHJ1c3QsIEluYy4xKDAmBgNVBAsTH1NlZSB3d3cuZW50cnVzdC5uZXQvbGVnYWwtdGVybXMx
|
3292 |
-
OTA3BgNVBAsTMChjKSAyMDA5IEVudHJ1c3QsIEluYy4gLSBmb3IgYXV0aG9yaXplZCB1c2Ugb25s
|
3293 |
-
eTEyMDAGA1UEAxMpRW50cnVzdCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IC0gRzIwggEi
|
3294 |
-
MA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC6hLZy254Ma+KZ6TABp3bqMriVQRrJ2mFOWHLP
|
3295 |
-
/vaCeb9zYQYKpSfYs1/TRU4cctZOMvJyig/3gxnQaoCAAEUesMfnmr8SVycco2gvCoe9amsOXmXz
|
3296 |
-
HHfV1IWNcCG0szLni6LVhjkCsbjSR87kyUnEO6fe+1R9V77w6G7CebI6C1XiUJgWMhNcL3hWwcKU
|
3297 |
-
s/Ja5CeanyTXxuzQmyWC48zCxEXFjJd6BmsqEZ+pCm5IO2/b1BEZQvePB7/1U1+cPvQXLOZprE4y
|
3298 |
-
TGJ36rfo5bs0vBmLrpxR57d+tVOxMyLlbc9wPBr64ptntoP0jaWvYkxN4FisZDQSA/i2jZRjJKRx
|
3299 |
-
AgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRqciZ6
|
3300 |
-
0B7vfec7aVHUbI2fkBJmqzANBgkqhkiG9w0BAQsFAAOCAQEAeZ8dlsa2eT8ijYfThwMEYGprmi5Z
|
3301 |
-
iXMRrEPR9RP/jTkrwPK9T3CMqS/qF8QLVJ7UG5aYMzyorWKiAHarWWluBh1+xLlEjZivEtRh2woZ
|
3302 |
-
Rkfz6/djwUAFQKXSt/S1mja/qYh2iARVBCuch38aNzx+LaUa2NSJXsq9rD1s2G2v1fN2D807iDgi
|
3303 |
-
nWyTmsQ9v4IbZT+mD12q/OWyFcq1rca8PdCE6OoGcrBNOTJ4vz4RnAuknZoh8/CbCzB428Hch0P+
|
3304 |
-
vGOaysXCHMnHjf87ElgI5rY97HosTvuDls4MPGmHVHOkc8KT/1EQrBVUAdj8BbGJoX90g5pJ19xO
|
3305 |
-
e4pIb4tF9g==
|
3306 |
-
-----END CERTIFICATE-----
|
3307 |
-
|
3308 |
-
Entrust Root Certification Authority - EC1
|
3309 |
-
==========================================
|
3310 |
-
-----BEGIN CERTIFICATE-----
|
3311 |
-
MIIC+TCCAoCgAwIBAgINAKaLeSkAAAAAUNCR+TAKBggqhkjOPQQDAzCBvzELMAkGA1UEBhMCVVMx
|
3312 |
-
FjAUBgNVBAoTDUVudHJ1c3QsIEluYy4xKDAmBgNVBAsTH1NlZSB3d3cuZW50cnVzdC5uZXQvbGVn
|
3313 |
-
YWwtdGVybXMxOTA3BgNVBAsTMChjKSAyMDEyIEVudHJ1c3QsIEluYy4gLSBmb3IgYXV0aG9yaXpl
|
3314 |
-
ZCB1c2Ugb25seTEzMDEGA1UEAxMqRW50cnVzdCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5
|
3315 |
-
IC0gRUMxMB4XDTEyMTIxODE1MjUzNloXDTM3MTIxODE1NTUzNlowgb8xCzAJBgNVBAYTAlVTMRYw
|
3316 |
-
FAYDVQQKEw1FbnRydXN0LCBJbmMuMSgwJgYDVQQLEx9TZWUgd3d3LmVudHJ1c3QubmV0L2xlZ2Fs
|
3317 |
-
LXRlcm1zMTkwNwYDVQQLEzAoYykgMjAxMiBFbnRydXN0LCBJbmMuIC0gZm9yIGF1dGhvcml6ZWQg
|
3318 |
-
dXNlIG9ubHkxMzAxBgNVBAMTKkVudHJ1c3QgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAt
|
3319 |
-
IEVDMTB2MBAGByqGSM49AgEGBSuBBAAiA2IABIQTydC6bUF74mzQ61VfZgIaJPRbiWlH47jCffHy
|
3320 |
-
AsWfoPZb1YsGGYZPUxBtByQnoaD41UcZYUx9ypMn6nQM72+WCf5j7HBdNq1nd67JnXxVRDqiY1Ef
|
3321 |
-
9eNi1KlHBz7MIKNCMEAwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYE
|
3322 |
-
FLdj5xrdjekIplWDpOBqUEFlEUJJMAoGCCqGSM49BAMDA2cAMGQCMGF52OVCR98crlOZF7ZvHH3h
|
3323 |
-
vxGU0QOIdeSNiaSKd0bebWHvAvX7td/M/k7//qnmpwIwW5nXhTcGtXsI/esni0qU+eH6p44mCOh8
|
3324 |
-
kmhtc9hvJqwhAriZtyZBWyVgrtBIGu4G
|
3325 |
-
-----END CERTIFICATE-----
|
3326 |
-
|
3327 |
-
CFCA EV ROOT
|
3328 |
-
============
|
3329 |
-
-----BEGIN CERTIFICATE-----
|
3330 |
-
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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-
PDCBBpEi6lmt2hkuIsKNuYyH4Ga8cyNfIWRjgEj1oDwYPZTISEEdQLpe/v5WOaHIz16eGWRGENoX
|
3353 |
-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
-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
|
3355 |
-
-----END CERTIFICATE-----
|
3356 |
-
|
3357 |
-
TÜRKTRUST Elektronik Sertifika Hizmet Sağlayıcısı H5
|
3358 |
-
====================================================
|
3359 |
-
-----BEGIN CERTIFICATE-----
|
3360 |
-
MIIEJzCCAw+gAwIBAgIHAI4X/iQggTANBgkqhkiG9w0BAQsFADCBsTELMAkGA1UEBhMCVFIxDzAN
|
3361 |
-
BgNVBAcMBkFua2FyYTFNMEsGA1UECgxEVMOcUktUUlVTVCBCaWxnaSDEsGxldGnFn2ltIHZlIEJp
|
3362 |
-
bGnFn2ltIEfDvHZlbmxpxJ9pIEhpem1ldGxlcmkgQS7Fni4xQjBABgNVBAMMOVTDnFJLVFJVU1Qg
|
3363 |
-
RWxla3Ryb25payBTZXJ0aWZpa2EgSGl6bWV0IFNhxJ9sYXnEsWPEsXPEsSBINTAeFw0xMzA0MzAw
|
3364 |
-
ODA3MDFaFw0yMzA0MjgwODA3MDFaMIGxMQswCQYDVQQGEwJUUjEPMA0GA1UEBwwGQW5rYXJhMU0w
|
3365 |
-
SwYDVQQKDERUw5xSS1RSVVNUIEJpbGdpIMSwbGV0acWfaW0gdmUgQmlsacWfaW0gR8O8dmVubGnE
|
3366 |
-
n2kgSGl6bWV0bGVyaSBBLsWeLjFCMEAGA1UEAww5VMOcUktUUlVTVCBFbGVrdHJvbmlrIFNlcnRp
|
3367 |
-
ZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sxc8SxIEg1MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB
|
3368 |
-
CgKCAQEApCUZ4WWe60ghUEoI5RHwWrom/4NZzkQqL/7hzmAD/I0Dpe3/a6i6zDQGn1k19uwsu537
|
3369 |
-
jVJp45wnEFPzpALFp/kRGml1bsMdi9GYjZOHp3GXDSHHmflS0yxjXVW86B8BSLlg/kJK9siArs1m
|
3370 |
-
ep5Fimh34khon6La8eHBEJ/rPCmBp+EyCNSgBbGM+42WAA4+Jd9ThiI7/PS98wl+d+yG6w8z5UNP
|
3371 |
-
9FR1bSmZLmZaQ9/LXMrI5Tjxfjs1nQ/0xVqhzPMggCTTV+wVunUlm+hkS7M0hO8EuPbJbKoCPrZV
|
3372 |
-
4jI3X/xml1/N1p7HIL9Nxqw/dV8c7TKcfGkAaZHjIxhT6QIDAQABo0IwQDAdBgNVHQ4EFgQUVpkH
|
3373 |
-
HtOsDGlktAxQR95DLL4gwPswDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZI
|
3374 |
-
hvcNAQELBQADggEBAJ5FdnsXSDLyOIspve6WSk6BGLFRRyDN0GSxDsnZAdkJzsiZ3GglE9Rc8qPo
|
3375 |
-
BP5yCccLqh0lVX6Wmle3usURehnmp349hQ71+S4pL+f5bFgWV1Al9j4uPqrtd3GqqpmWRgqujuwq
|
3376 |
-
URawXs3qZwQcWDD1YIq9pr1N5Za0/EKJAWv2cMhQOQwt1WbZyNKzMrcbGW3LM/nfpeYVhDfwwvJl
|
3377 |
-
lpKQd/Ct9JDpEXjXk4nAPQu6KfTomZ1yju2dL+6SfaHx/126M2CFYv4HAqGEVka+lgqaE9chTLd8
|
3378 |
-
B59OTj+RdPsnnRHM3eaxynFNExc5JsUpISuTKWqW+qtB4Uu2NQvAmxU=
|
3379 |
-
-----END CERTIFICATE-----
|
3380 |
-
|
3381 |
-
Certinomis - Root CA
|
3382 |
-
====================
|
3383 |
-
-----BEGIN CERTIFICATE-----
|
3384 |
-
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
-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
-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
-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
-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
-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
-
d5tK8O90gC3rMB+12ceAnGInkYjwSond3IjmFPnVAy//ldu9n+ws+hQVWZUKxkd8aRi5pwP5ynap
|
3391 |
-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
-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
-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
-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
-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
-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
-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
-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
-
6tNxIqSSaHh02TAfBgNVHSMEGDAWgBTvkUz1pcMw6C8I6tNxIqSSaHh02TANBgkqhkiG9w0BAQsF
|
3400 |
-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
-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
-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
-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
-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
-
Iff/ql+hbHY5ZtbqTFXhADObE5hjyW/QASAJN1LnDE8+zbz1X5YnpyACleAu6AdBBR8Vbtaw5Bng
|
3406 |
-
DwKTACdyxYvRVB9dSsNAl35VpnzBMwQUAR1JIGkLGZOdblgi90AMRgwjY/M50n92Uaf0yKHxDHYi
|
3407 |
-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
-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
|
3409 |
-
hkIGuUE=
|
3410 |
-
-----END CERTIFICATE-----
|
3411 |
-
|
3412 |
-
OISTE WISeKey Global Root GB CA
|
3413 |
-
===============================
|
3414 |
-
-----BEGIN CERTIFICATE-----
|
3415 |
-
MIIDtTCCAp2gAwIBAgIQdrEgUnTwhYdGs/gjGvbCwDANBgkqhkiG9w0BAQsFADBtMQswCQYDVQQG
|
3416 |
-
EwJDSDEQMA4GA1UEChMHV0lTZUtleTEiMCAGA1UECxMZT0lTVEUgRm91bmRhdGlvbiBFbmRvcnNl
|
3417 |
-
ZDEoMCYGA1UEAxMfT0lTVEUgV0lTZUtleSBHbG9iYWwgUm9vdCBHQiBDQTAeFw0xNDEyMDExNTAw
|
3418 |
-
MzJaFw0zOTEyMDExNTEwMzFaMG0xCzAJBgNVBAYTAkNIMRAwDgYDVQQKEwdXSVNlS2V5MSIwIAYD
|
3419 |
-
VQQLExlPSVNURSBGb3VuZGF0aW9uIEVuZG9yc2VkMSgwJgYDVQQDEx9PSVNURSBXSVNlS2V5IEds
|
3420 |
-
b2JhbCBSb290IEdCIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA2Be3HEokKtaX
|
3421 |
-
scriHvt9OO+Y9bI5mE4nuBFde9IllIiCFSZqGzG7qFshISvYD06fWvGxWuR51jIjK+FTzJlFXHtP
|
3422 |
-
rby/h0oLS5daqPZI7H17Dc0hBt+eFf1Biki3IPShehtX1F1Q/7pn2COZH8g/497/b1t3sWtuuMlk
|
3423 |
-
9+HKQUYOKXHQuSP8yYFfTvdv37+ErXNku7dCjmn21HYdfp2nuFeKUWdy19SouJVUQHMD9ur06/4o
|
3424 |
-
Qnc/nSMbsrY9gBQHTC5P99UKFg29ZkM3fiNDecNAhvVMKdqOmq0NpQSHiB6F4+lT1ZvIiwNjeOvg
|
3425 |
-
GUpuuy9rM2RYk61pv48b74JIxwIDAQABo1EwTzALBgNVHQ8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB
|
3426 |
-
/zAdBgNVHQ4EFgQUNQ/INmNe4qPs+TtmFc5RUuORmj0wEAYJKwYBBAGCNxUBBAMCAQAwDQYJKoZI
|
3427 |
-
hvcNAQELBQADggEBAEBM+4eymYGQfp3FsLAmzYh7KzKNbrghcViXfa43FK8+5/ea4n32cZiZBKpD
|
3428 |
-
dHij40lhPnOMTZTg+XHEthYOU3gf1qKHLwI5gSk8rxWYITD+KJAAjNHhy/peyP34EEY7onhCkRd0
|
3429 |
-
VQreUGdNZtGn//3ZwLWoo4rOZvUPQ82nK1d7Y0Zqqi5S2PTt4W2tKZB4SLrhI6qjiey1q5bAtEui
|
3430 |
-
HZeeevJuQHHfaPFlTc58Bd9TZaml8LGXBHAVRgOY1NK/VLSgWH1Sb9pWJmLU2NuJMW8c8CLC02Ic
|
3431 |
-
Nc1MaRVUGpCY3useX8p3x8uOPUNpnJpY0CQ73xtAln41rYHHTnG6iBM=
|
3432 |
-
-----END CERTIFICATE-----
|
3433 |
-
|
3434 |
-
SZAFIR ROOT CA2
|
3435 |
-
===============
|
3436 |
-
-----BEGIN CERTIFICATE-----
|
3437 |
-
MIIDcjCCAlqgAwIBAgIUPopdB+xV0jLVt+O2XwHrLdzk1uQwDQYJKoZIhvcNAQELBQAwUTELMAkG
|
3438 |
-
A1UEBhMCUEwxKDAmBgNVBAoMH0tyYWpvd2EgSXpiYSBSb3psaWN6ZW5pb3dhIFMuQS4xGDAWBgNV
|
3439 |
-
BAMMD1NaQUZJUiBST09UIENBMjAeFw0xNTEwMTkwNzQzMzBaFw0zNTEwMTkwNzQzMzBaMFExCzAJ
|
3440 |
-
BgNVBAYTAlBMMSgwJgYDVQQKDB9LcmFqb3dhIEl6YmEgUm96bGljemVuaW93YSBTLkEuMRgwFgYD
|
3441 |
-
VQQDDA9TWkFGSVIgUk9PVCBDQTIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC3vD5Q
|
3442 |
-
qEvNQLXOYeeWyrSh2gwisPq1e3YAd4wLz32ohswmUeQgPYUM1ljj5/QqGJ3a0a4m7utT3PSQ1hNK
|
3443 |
-
DJA8w/Ta0o4NkjrcsbH/ON7Dui1fgLkCvUqdGw+0w8LBZwPd3BucPbOw3gAeqDRHu5rr/gsUvTaE
|
3444 |
-
2g0gv/pby6kWIK05YO4vdbbnl5z5Pv1+TW9NL++IDWr63fE9biCloBK0TXC5ztdyO4mTp4CEHCdJ
|
3445 |
-
ckm1/zuVnsHMyAHs6A6KCpbns6aH5db5BSsNl0BwPLqsdVqc1U2dAgrSS5tmS0YHF2Wtn2yIANwi
|
3446 |
-
ieDhZNRnvDF5YTy7ykHNXGoAyDw4jlivAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0P
|
3447 |
-
AQH/BAQDAgEGMB0GA1UdDgQWBBQuFqlKGLXLzPVvUPMjX/hd56zwyDANBgkqhkiG9w0BAQsFAAOC
|
3448 |
-
AQEAtXP4A9xZWx126aMqe5Aosk3AM0+qmrHUuOQn/6mWmc5G4G18TKI4pAZw8PRBEew/R40/cof5
|
3449 |
-
O/2kbytTAOD/OblqBw7rHRz2onKQy4I9EYKL0rufKq8h5mOGnXkZ7/e7DDWQw4rtTw/1zBLZpD67
|
3450 |
-
oPwglV9PJi8RI4NOdQcPv5vRtB3pEAT+ymCPoky4rc/hkA/NrgrHXXu3UNLUYfrVFdvXn4dRVOul
|
3451 |
-
4+vJhaAlIDf7js4MNIThPIGyd05DpYhfhmehPea0XGG2Ptv+tyjFogeutcrKjSoS75ftwjCkySp6
|
3452 |
-
+/NNIxuZMzSgLvWpCz/UXeHPhJ/iGcJfitYgHuNztw==
|
3453 |
-
-----END CERTIFICATE-----
|
3454 |
-
|
3455 |
-
Certum Trusted Network CA 2
|
3456 |
-
===========================
|
3457 |
-
-----BEGIN CERTIFICATE-----
|
3458 |
-
MIIF0jCCA7qgAwIBAgIQIdbQSk8lD8kyN/yqXhKN6TANBgkqhkiG9w0BAQ0FADCBgDELMAkGA1UE
|
3459 |
-
BhMCUEwxIjAgBgNVBAoTGVVuaXpldG8gVGVjaG5vbG9naWVzIFMuQS4xJzAlBgNVBAsTHkNlcnR1
|
3460 |
-
bSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEkMCIGA1UEAxMbQ2VydHVtIFRydXN0ZWQgTmV0d29y
|
3461 |
-
ayBDQSAyMCIYDzIwMTExMDA2MDgzOTU2WhgPMjA0NjEwMDYwODM5NTZaMIGAMQswCQYDVQQGEwJQ
|
3462 |
-
TDEiMCAGA1UEChMZVW5pemV0byBUZWNobm9sb2dpZXMgUy5BLjEnMCUGA1UECxMeQ2VydHVtIENl
|
3463 |
-
cnRpZmljYXRpb24gQXV0aG9yaXR5MSQwIgYDVQQDExtDZXJ0dW0gVHJ1c3RlZCBOZXR3b3JrIENB
|
3464 |
-
IDIwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC9+Xj45tWADGSdhhuWZGc/IjoedQF9
|
3465 |
-
7/tcZ4zJzFxrqZHmuULlIEub2pt7uZld2ZuAS9eEQCsn0+i6MLs+CRqnSZXvK0AkwpfHp+6bJe+o
|
3466 |
-
CgCXhVqqndwpyeI1B+twTUrWwbNWuKFBOJvR+zF/j+Bf4bE/D44WSWDXBo0Y+aomEKsq09DRZ40b
|
3467 |
-
Rr5HMNUuctHFY9rnY3lEfktjJImGLjQ/KUxSiyqnwOKRKIm5wFv5HdnnJ63/mgKXwcZQkpsCLL2p
|
3468 |
-
uTRZCr+ESv/f/rOf69me4Jgj7KZrdxYq28ytOxykh9xGc14ZYmhFV+SQgkK7QtbwYeDBoz1mo130
|
3469 |
-
GO6IyY0XRSmZMnUCMe4pJshrAua1YkV/NxVaI2iJ1D7eTiew8EAMvE0Xy02isx7QBlrd9pPPV3WZ
|
3470 |
-
9fqGGmd4s7+W/jTcvedSVuWz5XV710GRBdxdaeOVDUO5/IOWOZV7bIBaTxNyxtd9KXpEulKkKtVB
|
3471 |
-
Rgkg/iKgtlswjbyJDNXXcPiHUv3a76xRLgezTv7QCdpw75j6VuZt27VXS9zlLCUVyJ4ueE742pye
|
3472 |
-
hizKV/Ma5ciSixqClnrDvFASadgOWkaLOusm+iPJtrCBvkIApPjW/jAux9JG9uWOdf3yzLnQh1vM
|
3473 |
-
BhBgu4M1t15n3kfsmUjxpKEV/q2MYo45VU85FrmxY53/twIDAQABo0IwQDAPBgNVHRMBAf8EBTAD
|
3474 |
-
AQH/MB0GA1UdDgQWBBS2oVQ5AsOgP46KvPrU+Bym0ToO/TAOBgNVHQ8BAf8EBAMCAQYwDQYJKoZI
|
3475 |
-
hvcNAQENBQADggIBAHGlDs7k6b8/ONWJWsQCYftMxRQXLYtPU2sQF/xlhMcQSZDe28cmk4gmb3DW
|
3476 |
-
Al45oPePq5a1pRNcgRRtDoGCERuKTsZPpd1iHkTfCVn0W3cLN+mLIMb4Ck4uWBzrM9DPhmDJ2vuA
|
3477 |
-
L55MYIR4PSFk1vtBHxgP58l1cb29XN40hz5BsA72udY/CROWFC/emh1auVbONTqwX3BNXuMp8SMo
|
3478 |
-
clm2q8KMZiYcdywmdjWLKKdpoPk79SPdhRB0yZADVpHnr7pH1BKXESLjokmUbOe3lEu6LaTaM4tM
|
3479 |
-
pkT/WjzGHWTYtTHkpjx6qFcL2+1hGsvxznN3Y6SHb0xRONbkX8eftoEq5IVIeVheO/jbAoJnwTnb
|
3480 |
-
w3RLPTYe+SmTiGhbqEQZIfCn6IENLOiTNrQ3ssqwGyZ6miUfmpqAnksqP/ujmv5zMnHCnsZy4Ypo
|
3481 |
-
J/HkD7TETKVhk/iXEAcqMCWpuchxuO9ozC1+9eB+D4Kob7a6bINDd82Kkhehnlt4Fj1F4jNy3eFm
|
3482 |
-
ypnTycUm/Q1oBEauttmbjL4ZvrHG8hnjXALKLNhvSgfZyTXaQHXyxKcZb55CEJh15pWLYLztxRLX
|
3483 |
-
is7VmFxWlgPF7ncGNf/P5O4/E2Hu29othfDNrp2yGAlFw5Khchf8R7agCyzxxN5DaAhqXzvwdmP7
|
3484 |
-
zAYspsbiDrW5viSP
|
3485 |
-
-----END CERTIFICATE-----
|
3486 |
-
|
3487 |
-
Hellenic Academic and Research Institutions RootCA 2015
|
3488 |
-
=======================================================
|
3489 |
-
-----BEGIN CERTIFICATE-----
|
3490 |
-
MIIGCzCCA/OgAwIBAgIBADANBgkqhkiG9w0BAQsFADCBpjELMAkGA1UEBhMCR1IxDzANBgNVBAcT
|
3491 |
-
BkF0aGVuczFEMEIGA1UEChM7SGVsbGVuaWMgQWNhZGVtaWMgYW5kIFJlc2VhcmNoIEluc3RpdHV0
|
3492 |
-
aW9ucyBDZXJ0LiBBdXRob3JpdHkxQDA+BgNVBAMTN0hlbGxlbmljIEFjYWRlbWljIGFuZCBSZXNl
|
3493 |
-
YXJjaCBJbnN0aXR1dGlvbnMgUm9vdENBIDIwMTUwHhcNMTUwNzA3MTAxMTIxWhcNNDAwNjMwMTAx
|
3494 |
-
MTIxWjCBpjELMAkGA1UEBhMCR1IxDzANBgNVBAcTBkF0aGVuczFEMEIGA1UEChM7SGVsbGVuaWMg
|
3495 |
-
QWNhZGVtaWMgYW5kIFJlc2VhcmNoIEluc3RpdHV0aW9ucyBDZXJ0LiBBdXRob3JpdHkxQDA+BgNV
|
3496 |
-
BAMTN0hlbGxlbmljIEFjYWRlbWljIGFuZCBSZXNlYXJjaCBJbnN0aXR1dGlvbnMgUm9vdENBIDIw
|
3497 |
-
MTUwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDC+Kk/G4n8PDwEXT2QNrCROnk8Zlrv
|
3498 |
-
bTkBSRq0t89/TSNTt5AA4xMqKKYx8ZEA4yjsriFBzh/a/X0SWwGDD7mwX5nh8hKDgE0GPt+sr+eh
|
3499 |
-
iGsxr/CL0BgzuNtFajT0AoAkKAoCFZVedioNmToUW/bLy1O8E00BiDeUJRtCvCLYjqOWXjrZMts+
|
3500 |
-
6PAQZe104S+nfK8nNLspfZu2zwnI5dMK/IhlZXQK3HMcXM1AsRzUtoSMTFDPaI6oWa7CJ06CojXd
|
3501 |
-
FPQf/7J31Ycvqm59JCfnxssm5uX+Zwdj2EUN3TpZZTlYepKZcj2chF6IIbjV9Cz82XBST3i4vTwr
|
3502 |
-
i5WY9bPRaM8gFH5MXF/ni+X1NYEZN9cRCLdmvtNKzoNXADrDgfgXy5I2XdGj2HUb4Ysn6npIQf1F
|
3503 |
-
GQatJ5lOwXBH3bWfgVMS5bGMSF0xQxfjjMZ6Y5ZLKTBOhE5iGV48zpeQpX8B653g+IuJ3SWYPZK2
|
3504 |
-
fu/Z8VFRfS0myGlZYeCsargqNhEEelC9MoS+L9xy1dcdFkfkR2YgP/SWxa+OAXqlD3pk9Q0Yh9mu
|
3505 |
-
iNX6hME6wGkoLfINaFGq46V3xqSQDqE3izEjR8EJCOtu93ib14L8hCCZSRm2Ekax+0VVFqmjZayc
|
3506 |
-
Bw/qa9wfLgZy7IaIEuQt218FL+TwA9MmM+eAws1CoRc0CwIDAQABo0IwQDAPBgNVHRMBAf8EBTAD
|
3507 |
-
AQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUcRVnyMjJvXVdctA4GGqd83EkVAswDQYJKoZI
|
3508 |
-
hvcNAQELBQADggIBAHW7bVRLqhBYRjTyYtcWNl0IXtVsyIe9tC5G8jH4fOpCtZMWVdyhDBKg2mF+
|
3509 |
-
D1hYc2Ryx+hFjtyp8iY/xnmMsVMIM4GwVhO+5lFc2JsKT0ucVlMC6U/2DWDqTUJV6HwbISHTGzrM
|
3510 |
-
d/K4kPFox/la/vot9L/J9UUbzjgQKjeKeaO04wlshYaT/4mWJ3iBj2fjRnRUjtkNaeJK9E10A/+y
|
3511 |
-
d+2VZ5fkscWrv2oj6NSU4kQoYsRL4vDY4ilrGnB+JGGTe08DMiUNRSQrlrRGar9KC/eaj8GsGsVn
|
3512 |
-
82800vpzY4zvFrCopEYq+OsS7HK07/grfoxSwIuEVPkvPuNVqNxmsdnhX9izjFk0WaSrT2y7Hxjb
|
3513 |
-
davYy5LNlDhhDgcGH0tGEPEVvo2FXDtKK4F5D7Rpn0lQl033DlZdwJVqwjbDG2jJ9SrcR5q+ss7F
|
3514 |
-
Jej6A7na+RZukYT1HCjI/CbM1xyQVqdfbzoEvM14iQuODy+jqk+iGxI9FghAD/FGTNeqewjBCvVt
|
3515 |
-
J94Cj8rDtSvK6evIIVM4pcw72Hc3MKJP2W/R8kCtQXoXxdZKNYm3QdV8hn9VTYNKpXMgwDqvkPGa
|
3516 |
-
JI7ZjnHKe7iG2rKPmT4dEw0SEe7Uq/DpFXYC5ODfqiAeW2GFZECpkJcNrVPSWh2HagCXZWK0vm9q
|
3517 |
-
p/UsQu0yrbYhnr68
|
3518 |
-
-----END CERTIFICATE-----
|
3519 |
-
|
3520 |
-
Hellenic Academic and Research Institutions ECC RootCA 2015
|
3521 |
-
===========================================================
|
3522 |
-
-----BEGIN CERTIFICATE-----
|
3523 |
-
MIICwzCCAkqgAwIBAgIBADAKBggqhkjOPQQDAjCBqjELMAkGA1UEBhMCR1IxDzANBgNVBAcTBkF0
|
3524 |
-
aGVuczFEMEIGA1UEChM7SGVsbGVuaWMgQWNhZGVtaWMgYW5kIFJlc2VhcmNoIEluc3RpdHV0aW9u
|
3525 |
-
cyBDZXJ0LiBBdXRob3JpdHkxRDBCBgNVBAMTO0hlbGxlbmljIEFjYWRlbWljIGFuZCBSZXNlYXJj
|
3526 |
-
aCBJbnN0aXR1dGlvbnMgRUNDIFJvb3RDQSAyMDE1MB4XDTE1MDcwNzEwMzcxMloXDTQwMDYzMDEw
|
3527 |
-
MzcxMlowgaoxCzAJBgNVBAYTAkdSMQ8wDQYDVQQHEwZBdGhlbnMxRDBCBgNVBAoTO0hlbGxlbmlj
|
3528 |
-
IEFjYWRlbWljIGFuZCBSZXNlYXJjaCBJbnN0aXR1dGlvbnMgQ2VydC4gQXV0aG9yaXR5MUQwQgYD
|
3529 |
-
VQQDEztIZWxsZW5pYyBBY2FkZW1pYyBhbmQgUmVzZWFyY2ggSW5zdGl0dXRpb25zIEVDQyBSb290
|
3530 |
-
Q0EgMjAxNTB2MBAGByqGSM49AgEGBSuBBAAiA2IABJKgQehLgoRc4vgxEZmGZE4JJS+dQS8KrjVP
|
3531 |
-
dJWyUWRrjWvmP3CV8AVER6ZyOFB2lQJajq4onvktTpnvLEhvTCUp6NFxW98dwXU3tNf6e3pCnGoK
|
3532 |
-
Vlp8aQuqgAkkbH7BRqNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0O
|
3533 |
-
BBYEFLQiC4KZJAEOnLvkDv2/+5cgk5kqMAoGCCqGSM49BAMCA2cAMGQCMGfOFmI4oqxiRaeplSTA
|
3534 |
-
GiecMjvAwNW6qef4BENThe5SId6d9SWDPp5YSy/XZxMOIQIwBeF1Ad5o7SofTUwJCA3sS61kFyjn
|
3535 |
-
dc5FZXIhF8siQQ6ME5g4mlRtm8rifOoCWCKR
|
3536 |
-
-----END CERTIFICATE-----
|
3537 |
-
|
3538 |
-
Certplus Root CA G1
|
3539 |
-
===================
|
3540 |
-
-----BEGIN CERTIFICATE-----
|
3541 |
-
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
-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
-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
-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
-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
-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
-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
-
BYZHYEMzkPZHogNPlk2dT8Hq6pyi/jQu3rfKG3akt62f6ajUeD94/vI4CTYd0hYCyOwqaK/1jpTv
|
3549 |
-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
-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
-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
-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
-
jy3LKCHyamz0GqbFFLQ3ZU+V/YDI+HLlJWvEYLF7bY5KinPOWftwenMGE9nTdDckQQoRb5fc5+R+
|
3554 |
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-
+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
|
3565 |
-
qsOR0C5CB8AMTVPNJLFMWx5R9N/pkvo=
|
3566 |
-
-----END CERTIFICATE-----
|
3567 |
-
|
3568 |
-
Certplus Root CA G2
|
3569 |
-
===================
|
3570 |
-
-----BEGIN CERTIFICATE-----
|
3571 |
-
MIICHDCCAaKgAwIBAgISESDZkc6uo+jF5//pAq/Pc7xVMAoGCCqGSM49BAMDMD4xCzAJBgNVBAYT
|
3572 |
-
AkZSMREwDwYDVQQKDAhDZXJ0cGx1czEcMBoGA1UEAwwTQ2VydHBsdXMgUm9vdCBDQSBHMjAeFw0x
|
3573 |
-
NDA1MjYwMDAwMDBaFw0zODAxMTUwMDAwMDBaMD4xCzAJBgNVBAYTAkZSMREwDwYDVQQKDAhDZXJ0
|
3574 |
-
cGx1czEcMBoGA1UEAwwTQ2VydHBsdXMgUm9vdCBDQSBHMjB2MBAGByqGSM49AgEGBSuBBAAiA2IA
|
3575 |
-
BM0PW1aC3/BFGtat93nwHcmsltaeTpwftEIRyoa/bfuFo8XlGVzX7qY/aWfYeOKmycTbLXku54uN
|
3576 |
-
Am8xIk0G42ByRZ0OQneezs/lf4WbGOT8zC5y0xaTTsqZY1yhBSpsBqNjMGEwDgYDVR0PAQH/BAQD
|
3577 |
-
AgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFNqDYwJ5jtpMxjwjFNiPwyCrKGBZMB8GA1Ud
|
3578 |
-
IwQYMBaAFNqDYwJ5jtpMxjwjFNiPwyCrKGBZMAoGCCqGSM49BAMDA2gAMGUCMHD+sAvZ94OX7PNV
|
3579 |
-
HdTcswYO/jOYnYs5kGuUIe22113WTNchp+e/IQ8rzfcq3IUHnQIxAIYUFuXcsGXCwI4Un78kFmjl
|
3580 |
-
vPl5adytRSv3tjFzzAalU5ORGpOucGpnutee5WEaXw==
|
3581 |
-
-----END CERTIFICATE-----
|
3582 |
-
|
3583 |
-
OpenTrust Root CA G1
|
3584 |
-
====================
|
3585 |
-
-----BEGIN CERTIFICATE-----
|
3586 |
-
MIIFbzCCA1egAwIBAgISESCzkFU5fX82bWTCp59rY45nMA0GCSqGSIb3DQEBCwUAMEAxCzAJBgNV
|
3587 |
-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
-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
-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
-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
-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
-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
-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
-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
-
9z0M+Yo0FMT7MzUj8czxKselu7Cizv5Ta01BG2Yospb6p64KTrk5M0ScdMGTHPjgniQlQ/GbI4Kq
|
3596 |
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
|
3610 |
-
OXXUc0ECd97N4EOH1uS6SsNsEn/+KuYj1oxx
|
3611 |
-
-----END CERTIFICATE-----
|
3612 |
-
|
3613 |
-
OpenTrust Root CA G2
|
3614 |
-
====================
|
3615 |
-
-----BEGIN CERTIFICATE-----
|
3616 |
-
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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
|
3640 |
-
u7JwqkwR3v98KzfUetF3NI/n+UL3PIEMS1IK
|
3641 |
-
-----END CERTIFICATE-----
|
3642 |
-
|
3643 |
-
OpenTrust Root CA G3
|
3644 |
-
====================
|
3645 |
-
-----BEGIN CERTIFICATE-----
|
3646 |
-
MIICITCCAaagAwIBAgISESDm+Ez8JLC+BUCs2oMbNGA/MAoGCCqGSM49BAMDMEAxCzAJBgNVBAYT
|
3647 |
-
AkZSMRIwEAYDVQQKDAlPcGVuVHJ1c3QxHTAbBgNVBAMMFE9wZW5UcnVzdCBSb290IENBIEczMB4X
|
3648 |
-
DTE0MDUyNjAwMDAwMFoXDTM4MDExNTAwMDAwMFowQDELMAkGA1UEBhMCRlIxEjAQBgNVBAoMCU9w
|
3649 |
-
ZW5UcnVzdDEdMBsGA1UEAwwUT3BlblRydXN0IFJvb3QgQ0EgRzMwdjAQBgcqhkjOPQIBBgUrgQQA
|
3650 |
-
IgNiAARK7liuTcpm3gY6oxH84Bjwbhy6LTAMidnW7ptzg6kjFYwvWYpa3RTqnVkrQ7cG7DK2uu5B
|
3651 |
-
ta1doYXM6h0UZqNnfkbilPPntlahFVmhTzeXuSIevRHr9LIfXsMUmuXZl5mjYzBhMA4GA1UdDwEB
|
3652 |
-
/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRHd8MUi2I5DMlv4VBN0BBY3JWIbTAf
|
3653 |
-
BgNVHSMEGDAWgBRHd8MUi2I5DMlv4VBN0BBY3JWIbTAKBggqhkjOPQQDAwNpADBmAjEAj6jcnboM
|
3654 |
-
BBf6Fek9LykBl7+BFjNAk2z8+e2AcG+qj9uEwov1NcoG3GRvaBbhj5G5AjEA2Euly8LQCGzpGPta
|
3655 |
-
3U1fJAuwACEl74+nBCZx4nxp5V2a+EEfOzmTk51V6s2N8fvB
|
3656 |
-
-----END CERTIFICATE-----
|
3657 |
-
|
3658 |
-
ISRG Root X1
|
3659 |
-
============
|
3660 |
-
-----BEGIN CERTIFICATE-----
|
3661 |
-
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
-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
-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
-
EwJVUzEpMCcGA1UEChMgSW50ZXJuZXQgU2VjdXJpdHkgUmVzZWFyY2ggR3JvdXAxFTATBgNVBAMT
|
3665 |
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-
TdwJx4nLCgdNbOhdjsnvzqvHu7UrTkXWStAmzOVyyghqpZXjFaH3pO3JLF+l+/+sKAIuvtd7u+Nx
|
3681 |
-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
-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
-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
-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
|
3685 |
-
m+kXQ99b21/+jh5Xos1AnX5iItreGCc=
|
3686 |
-
-----END CERTIFICATE-----
|
3687 |
-
|
3688 |
-
AC RAIZ FNMT-RCM
|
3689 |
-
================
|
3690 |
-
-----BEGIN CERTIFICATE-----
|
3691 |
-
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
-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
-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
-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
-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
-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
-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
-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
-
08YfxGyqxRxqAQVKL9LFwag0Jl1mpdICIfkYtwb1TplvqKtMUejPUBjFd8g5CSxJkjKZqLsXF3mw
|
3700 |
-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
-
tOmlcYF7wk5HlqX2doWjKI/pgG6BU6VtX7hI+cL5NqYuSf+4lsKMB7ObiFj86xsc3i1w4peSMKGJ
|
3702 |
-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
-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
-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
-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
-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
-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
-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
-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
-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
-
+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
-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
-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
-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
-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
|
3716 |
-
-----END CERTIFICATE-----
|
3717 |
-
|
3718 |
-
Amazon Root CA 1
|
3719 |
-
================
|
3720 |
-
-----BEGIN CERTIFICATE-----
|
3721 |
-
MIIDQTCCAimgAwIBAgITBmyfz5m/jAo54vB4ikPmljZbyjANBgkqhkiG9w0BAQsFADA5MQswCQYD
|
3722 |
-
VQQGEwJVUzEPMA0GA1UEChMGQW1hem9uMRkwFwYDVQQDExBBbWF6b24gUm9vdCBDQSAxMB4XDTE1
|
3723 |
-
MDUyNjAwMDAwMFoXDTM4MDExNzAwMDAwMFowOTELMAkGA1UEBhMCVVMxDzANBgNVBAoTBkFtYXpv
|
3724 |
-
bjEZMBcGA1UEAxMQQW1hem9uIFJvb3QgQ0EgMTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC
|
3725 |
-
ggEBALJ4gHHKeNXjca9HgFB0fW7Y14h29Jlo91ghYPl0hAEvrAIthtOgQ3pOsqTQNroBvo3bSMgH
|
3726 |
-
FzZM9O6II8c+6zf1tRn4SWiw3te5djgdYZ6k/oI2peVKVuRF4fn9tBb6dNqcmzU5L/qwIFAGbHrQ
|
3727 |
-
gLKm+a/sRxmPUDgH3KKHOVj4utWp+UhnMJbulHheb4mjUcAwhmahRWa6VOujw5H5SNz/0egwLX0t
|
3728 |
-
dHA114gk957EWW67c4cX8jJGKLhD+rcdqsq08p8kDi1L93FcXmn/6pUCyziKrlA4b9v7LWIbxcce
|
3729 |
-
VOF34GfID5yHI9Y/QCB/IIDEgEw+OyQmjgSubJrIqg0CAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB
|
3730 |
-
/zAOBgNVHQ8BAf8EBAMCAYYwHQYDVR0OBBYEFIQYzIU07LwMlJQuCFmcx7IQTgoIMA0GCSqGSIb3
|
3731 |
-
DQEBCwUAA4IBAQCY8jdaQZChGsV2USggNiMOruYou6r4lK5IpDB/G/wkjUu0yKGX9rbxenDIU5PM
|
3732 |
-
CCjjmCXPI6T53iHTfIUJrU6adTrCC2qJeHZERxhlbI1Bjjt/msv0tadQ1wUsN+gDS63pYaACbvXy
|
3733 |
-
8MWy7Vu33PqUXHeeE6V/Uq2V8viTO96LXFvKWlJbYK8U90vvo/ufQJVtMVT8QtPHRh8jrdkPSHCa
|
3734 |
-
2XV4cdFyQzR1bldZwgJcJmApzyMZFo6IQ6XU5MsI+yMRQ+hDKXJioaldXgjUkK642M4UwtBV8ob2
|
3735 |
-
xJNDd2ZhwLnoQdeXeGADbkpyrqXRfboQnoZsG4q5WTP468SQvvG5
|
3736 |
-
-----END CERTIFICATE-----
|
3737 |
-
|
3738 |
-
Amazon Root CA 2
|
3739 |
-
================
|
3740 |
-
-----BEGIN CERTIFICATE-----
|
3741 |
-
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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-
+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
-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
-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
-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
-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
-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
-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
-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
|
3765 |
-
-----END CERTIFICATE-----
|
3766 |
-
|
3767 |
-
Amazon Root CA 3
|
3768 |
-
================
|
3769 |
-
-----BEGIN CERTIFICATE-----
|
3770 |
-
MIIBtjCCAVugAwIBAgITBmyf1XSXNmY/Owua2eiedgPySjAKBggqhkjOPQQDAjA5MQswCQYDVQQG
|
3771 |
-
EwJVUzEPMA0GA1UEChMGQW1hem9uMRkwFwYDVQQDExBBbWF6b24gUm9vdCBDQSAzMB4XDTE1MDUy
|
3772 |
-
NjAwMDAwMFoXDTQwMDUyNjAwMDAwMFowOTELMAkGA1UEBhMCVVMxDzANBgNVBAoTBkFtYXpvbjEZ
|
3773 |
-
MBcGA1UEAxMQQW1hem9uIFJvb3QgQ0EgMzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABCmXp8ZB
|
3774 |
-
f8ANm+gBG1bG8lKlui2yEujSLtf6ycXYqm0fc4E7O5hrOXwzpcVOho6AF2hiRVd9RFgdszflZwjr
|
3775 |
-
Zt6jQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgGGMB0GA1UdDgQWBBSrttvXBp43
|
3776 |
-
rDCGB5Fwx5zEGbF4wDAKBggqhkjOPQQDAgNJADBGAiEA4IWSoxe3jfkrBqWTrBqYaGFy+uGh0Psc
|
3777 |
-
eGCmQ5nFuMQCIQCcAu/xlJyzlvnrxir4tiz+OpAUFteMYyRIHN8wfdVoOw==
|
3778 |
-
-----END CERTIFICATE-----
|
3779 |
-
|
3780 |
-
Amazon Root CA 4
|
3781 |
-
================
|
3782 |
-
-----BEGIN CERTIFICATE-----
|
3783 |
-
MIIB8jCCAXigAwIBAgITBmyf18G7EEwpQ+Vxe3ssyBrBDjAKBggqhkjOPQQDAzA5MQswCQYDVQQG
|
3784 |
-
EwJVUzEPMA0GA1UEChMGQW1hem9uMRkwFwYDVQQDExBBbWF6b24gUm9vdCBDQSA0MB4XDTE1MDUy
|
3785 |
-
NjAwMDAwMFoXDTQwMDUyNjAwMDAwMFowOTELMAkGA1UEBhMCVVMxDzANBgNVBAoTBkFtYXpvbjEZ
|
3786 |
-
MBcGA1UEAxMQQW1hem9uIFJvb3QgQ0EgNDB2MBAGByqGSM49AgEGBSuBBAAiA2IABNKrijdPo1MN
|
3787 |
-
/sGKe0uoe0ZLY7Bi9i0b2whxIdIA6GO9mif78DluXeo9pcmBqqNbIJhFXRbb/egQbeOc4OO9X4Ri
|
3788 |
-
83BkM6DLJC9wuoihKqB1+IGuYgbEgds5bimwHvouXKNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNV
|
3789 |
-
HQ8BAf8EBAMCAYYwHQYDVR0OBBYEFNPsxzplbszh2naaVvuc84ZtV+WBMAoGCCqGSM49BAMDA2gA
|
3790 |
-
MGUCMDqLIfG9fhGt0O9Yli/W651+kI0rz2ZVwyzjKKlwCkcO8DdZEv8tmZQoTipPNU0zWgIxAOp1
|
3791 |
-
AE47xDqUEpHJWEadIRNyp4iciuRMStuW1KyLa2tJElMzrdfkviT8tQp21KW8EA==
|
3792 |
-
-----END CERTIFICATE-----
|
3793 |
-
|
3794 |
-
LuxTrust Global Root 2
|
3795 |
-
======================
|
3796 |
-
-----BEGIN CERTIFICATE-----
|
3797 |
-
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
-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
-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
-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
-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
-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
-
xjcwYkSSl2l9QjAk5A0MiWtj3sXh306pFGxT4GHO9hcvHTy95iJMHZP1EMShduxq3sVs35a0VkBC
|
3804 |
-
wGKSMKEtFZSg0iAGCW5qbeXrt77U8PEVfIvmTroTzEsnXpk8F12PgX8zPU/TPxvsXD/wPEx1bvKm
|
3805 |
-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
-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
-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
-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
-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
-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
-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
-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
-
+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
-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
-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
-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
-
ZY+kt9J/Z93I055cqqmkoCUUBpvsT34tC38ddfEz2O3OuHVtPlu5mB0xDVbYQw8wkbIEa91WvpWA
|
3818 |
-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
-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
-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
-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
-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
|
3823 |
-
-----END CERTIFICATE-----
|
3824 |
-
|
3825 |
-
TUBITAK Kamu SM SSL Kok Sertifikasi - Surum 1
|
3826 |
-
=============================================
|
3827 |
-
-----BEGIN CERTIFICATE-----
|
3828 |
-
MIIEYzCCA0ugAwIBAgIBATANBgkqhkiG9w0BAQsFADCB0jELMAkGA1UEBhMCVFIxGDAWBgNVBAcT
|
3829 |
-
D0dlYnplIC0gS29jYWVsaTFCMEAGA1UEChM5VHVya2l5ZSBCaWxpbXNlbCB2ZSBUZWtub2xvamlr
|
3830 |
-
IEFyYXN0aXJtYSBLdXJ1bXUgLSBUVUJJVEFLMS0wKwYDVQQLEyRLYW11IFNlcnRpZmlrYXN5b24g
|
3831 |
-
TWVya2V6aSAtIEthbXUgU00xNjA0BgNVBAMTLVRVQklUQUsgS2FtdSBTTSBTU0wgS29rIFNlcnRp
|
3832 |
-
ZmlrYXNpIC0gU3VydW0gMTAeFw0xMzExMjUwODI1NTVaFw00MzEwMjUwODI1NTVaMIHSMQswCQYD
|
3833 |
-
VQQGEwJUUjEYMBYGA1UEBxMPR2ViemUgLSBLb2NhZWxpMUIwQAYDVQQKEzlUdXJraXllIEJpbGlt
|
3834 |
-
c2VsIHZlIFRla25vbG9qaWsgQXJhc3Rpcm1hIEt1cnVtdSAtIFRVQklUQUsxLTArBgNVBAsTJEth
|
3835 |
-
bXUgU2VydGlmaWthc3lvbiBNZXJrZXppIC0gS2FtdSBTTTE2MDQGA1UEAxMtVFVCSVRBSyBLYW11
|
3836 |
-
IFNNIFNTTCBLb2sgU2VydGlmaWthc2kgLSBTdXJ1bSAxMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A
|
3837 |
-
MIIBCgKCAQEAr3UwM6q7a9OZLBI3hNmNe5eA027n/5tQlT6QlVZC1xl8JoSNkvoBHToP4mQ4t4y8
|
3838 |
-
6Ij5iySrLqP1N+RAjhgleYN1Hzv/bKjFxlb4tO2KRKOrbEz8HdDc72i9z+SqzvBV96I01INrN3wc
|
3839 |
-
wv61A+xXzry0tcXtAA9TNypN9E8Mg/uGz8v+jE69h/mniyFXnHrfA2eJLJ2XYacQuFWQfw4tJzh0
|
3840 |
-
3+f92k4S400VIgLI4OD8D62K18lUUMw7D8oWgITQUVbDjlZ/iSIzL+aFCr2lqBs23tPcLG07xxO9
|
3841 |
-
WSMs5uWk99gL7eqQQESolbuT1dCANLZGeA4fAJNG4e7p+exPFwIDAQABo0IwQDAdBgNVHQ4EFgQU
|
3842 |
-
ZT/HiobGPN08VFw1+DrtUgxHV8gwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wDQYJ
|
3843 |
-
KoZIhvcNAQELBQADggEBACo/4fEyjq7hmFxLXs9rHmoJ0iKpEsdeV31zVmSAhHqT5Am5EM2fKifh
|
3844 |
-
AHe+SMg1qIGf5LgsyX8OsNJLN13qudULXjS99HMpw+0mFZx+CFOKWI3QSyjfwbPfIPP54+M638yc
|
3845 |
-
lNhOT8NrF7f3cuitZjO1JVOr4PhMqZ398g26rrnZqsZr+ZO7rqu4lzwDGrpDxpa5RXI4s6ehlj2R
|
3846 |
-
e37AIVNMh+3yC1SVUZPVIqUNivGTDj5UDrDYyU7c8jEyVupk+eq1nRZmQnLzf9OxMUP8pI4X8W0j
|
3847 |
-
q5Rm+K37DwhuJi1/FwcJsoz7UMCflo3Ptv0AnVoUmr8CRPXBwp8iXqIPoeM=
|
3848 |
-
-----END CERTIFICATE-----
|
3849 |
-
|
3850 |
-
GDCA TrustAUTH R5 ROOT
|
3851 |
-
======================
|
3852 |
-
-----BEGIN CERTIFICATE-----
|
3853 |
-
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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-
+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
-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
-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
-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
-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
-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
|
3878 |
-
-----END CERTIFICATE-----
|
3879 |
-
|
3880 |
-
TrustCor RootCert CA-1
|
3881 |
-
======================
|
3882 |
-
-----BEGIN CERTIFICATE-----
|
3883 |
-
MIIEMDCCAxigAwIBAgIJANqb7HHzA7AZMA0GCSqGSIb3DQEBCwUAMIGkMQswCQYDVQQGEwJQQTEP
|
3884 |
-
MA0GA1UECAwGUGFuYW1hMRQwEgYDVQQHDAtQYW5hbWEgQ2l0eTEkMCIGA1UECgwbVHJ1c3RDb3Ig
|
3885 |
-
U3lzdGVtcyBTLiBkZSBSLkwuMScwJQYDVQQLDB5UcnVzdENvciBDZXJ0aWZpY2F0ZSBBdXRob3Jp
|
3886 |
-
dHkxHzAdBgNVBAMMFlRydXN0Q29yIFJvb3RDZXJ0IENBLTEwHhcNMTYwMjA0MTIzMjE2WhcNMjkx
|
3887 |
-
MjMxMTcyMzE2WjCBpDELMAkGA1UEBhMCUEExDzANBgNVBAgMBlBhbmFtYTEUMBIGA1UEBwwLUGFu
|
3888 |
-
YW1hIENpdHkxJDAiBgNVBAoMG1RydXN0Q29yIFN5c3RlbXMgUy4gZGUgUi5MLjEnMCUGA1UECwwe
|
3889 |
-
VHJ1c3RDb3IgQ2VydGlmaWNhdGUgQXV0aG9yaXR5MR8wHQYDVQQDDBZUcnVzdENvciBSb290Q2Vy
|
3890 |
-
dCBDQS0xMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAv463leLCJhJrMxnHQFgKq1mq
|
3891 |
-
jQCj/IDHUHuO1CAmujIS2CNUSSUQIpidRtLByZ5OGy4sDjjzGiVoHKZaBeYei0i/mJZ0PmnK6bV4
|
3892 |
-
pQa81QBeCQryJ3pS/C3Vseq0iWEk8xoT26nPUu0MJLq5nux+AHT6k61sKZKuUbS701e/s/OojZz0
|
3893 |
-
JEsq1pme9J7+wH5COucLlVPat2gOkEz7cD+PSiyU8ybdY2mplNgQTsVHCJCZGxdNuWxu72CVEY4h
|
3894 |
-
gLW9oHPY0LJ3xEXqWib7ZnZ2+AYfYW0PVcWDtxBWcgYHpfOxGgMFZA6dWorWhnAbJN7+KIor0Gqw
|
3895 |
-
/Hqi3LJ5DotlDwIDAQABo2MwYTAdBgNVHQ4EFgQU7mtJPHo/DeOxCbeKyKsZn3MzUOcwHwYDVR0j
|
3896 |
-
BBgwFoAU7mtJPHo/DeOxCbeKyKsZn3MzUOcwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC
|
3897 |
-
AYYwDQYJKoZIhvcNAQELBQADggEBACUY1JGPE+6PHh0RU9otRCkZoB5rMZ5NDp6tPVxBb5UrJKF5
|
3898 |
-
mDo4Nvu7Zp5I/5CQ7z3UuJu0h3U/IJvOcs+hVcFNZKIZBqEHMwwLKeXx6quj7LUKdJDHfXLy11yf
|
3899 |
-
ke+Ri7fc7Waiz45mO7yfOgLgJ90WmMCV1Aqk5IGadZQ1nJBfiDcGrVmVCrDRZ9MZyonnMlo2HD6C
|
3900 |
-
qFqTvsbQZJG2z9m2GM/bftJlo6bEjhcxwft+dtvTheNYsnd6djtsL1Ac59v2Z3kf9YKVmgenFK+P
|
3901 |
-
3CghZwnS1k1aHBkcjndcw5QkPTJrS37UeJSDvjdNzl/HHk484IkzlQsPpTLWPFp5LBk=
|
3902 |
-
-----END CERTIFICATE-----
|
3903 |
-
|
3904 |
-
TrustCor RootCert CA-2
|
3905 |
-
======================
|
3906 |
-
-----BEGIN CERTIFICATE-----
|
3907 |
-
MIIGLzCCBBegAwIBAgIIJaHfyjPLWQIwDQYJKoZIhvcNAQELBQAwgaQxCzAJBgNVBAYTAlBBMQ8w
|
3908 |
-
DQYDVQQIDAZQYW5hbWExFDASBgNVBAcMC1BhbmFtYSBDaXR5MSQwIgYDVQQKDBtUcnVzdENvciBT
|
3909 |
-
eXN0ZW1zIFMuIGRlIFIuTC4xJzAlBgNVBAsMHlRydXN0Q29yIENlcnRpZmljYXRlIEF1dGhvcml0
|
3910 |
-
eTEfMB0GA1UEAwwWVHJ1c3RDb3IgUm9vdENlcnQgQ0EtMjAeFw0xNjAyMDQxMjMyMjNaFw0zNDEy
|
3911 |
-
MzExNzI2MzlaMIGkMQswCQYDVQQGEwJQQTEPMA0GA1UECAwGUGFuYW1hMRQwEgYDVQQHDAtQYW5h
|
3912 |
-
bWEgQ2l0eTEkMCIGA1UECgwbVHJ1c3RDb3IgU3lzdGVtcyBTLiBkZSBSLkwuMScwJQYDVQQLDB5U
|
3913 |
-
cnVzdENvciBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkxHzAdBgNVBAMMFlRydXN0Q29yIFJvb3RDZXJ0
|
3914 |
-
IENBLTIwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCnIG7CKqJiJJWQdsg4foDSq8Gb
|
3915 |
-
ZQWU9MEKENUCrO2fk8eHyLAnK0IMPQo+QVqedd2NyuCb7GgypGmSaIwLgQ5WoD4a3SwlFIIvl9Nk
|
3916 |
-
RvRUqdw6VC0xK5mC8tkq1+9xALgxpL56JAfDQiDyitSSBBtlVkxs1Pu2YVpHI7TYabS3OtB0PAx1
|
3917 |
-
oYxOdqHp2yqlO/rOsP9+aij9JxzIsekp8VduZLTQwRVtDr4uDkbIXvRR/u8OYzo7cbrPb1nKDOOb
|
3918 |
-
XUm4TOJXsZiKQlecdu/vvdFoqNL0Cbt3Nb4lggjEFixEIFapRBF37120Hapeaz6LMvYHL1cEksr1
|
3919 |
-
/p3C6eizjkxLAjHZ5DxIgif3GIJ2SDpxsROhOdUuxTTCHWKF3wP+TfSvPd9cW436cOGlfifHhi5q
|
3920 |
-
jxLGhF5DUVCcGZt45vz27Ud+ez1m7xMTiF88oWP7+ayHNZ/zgp6kPwqcMWmLmaSISo5uZk3vFsQP
|
3921 |
-
eSghYA2FFn3XVDjxklb9tTNMg9zXEJ9L/cb4Qr26fHMC4P99zVvh1Kxhe1fVSntb1IVYJ12/+Ctg
|
3922 |
-
rKAmrhQhJ8Z3mjOAPF5GP/fDsaOGM8boXg25NSyqRsGFAnWAoOsk+xWq5Gd/bnc/9ASKL3x74xdh
|
3923 |
-
8N0JqSDIvgmk0H5Ew7IwSjiqqewYmgeCK9u4nBit2uBGF6zPXQIDAQABo2MwYTAdBgNVHQ4EFgQU
|
3924 |
-
2f4hQG6UnrybPZx9mCAZ5YwwYrIwHwYDVR0jBBgwFoAU2f4hQG6UnrybPZx9mCAZ5YwwYrIwDwYD
|
3925 |
-
VR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAYYwDQYJKoZIhvcNAQELBQADggIBAJ5Fngw7tu/h
|
3926 |
-
Osh80QA9z+LqBrWyOrsGS2h60COXdKcs8AjYeVrXWoSK2BKaG9l9XE1wxaX5q+WjiYndAfrs3fnp
|
3927 |
-
kpfbsEZC89NiqpX+MWcUaViQCqoL7jcjx1BRtPV+nuN79+TMQjItSQzL/0kMmx40/W5ulop5A7Zv
|
3928 |
-
2wnL/V9lFDfhOPXzYRZY5LVtDQsEGz9QLX+zx3oaFoBg+Iof6Rsqxvm6ARppv9JYx1RXCI/hOWB3
|
3929 |
-
S6xZhBqI8d3LT3jX5+EzLfzuQfogsL7L9ziUwOHQhQ+77Sxzq+3+knYaZH9bDTMJBzN7Bj8RpFxw
|
3930 |
-
PIXAz+OQqIN3+tvmxYxoZxBnpVIt8MSZj3+/0WvitUfW2dCFmU2Umw9Lje4AWkcdEQOsQRivh7dv
|
3931 |
-
DDqPys/cA8GiCcjl/YBeyGBCARsaU1q7N6a3vLqE6R5sGtRk2tRD/pOLS/IseRYQ1JMLiI+h2IYU
|
3932 |
-
RpFHmygk71dSTlxCnKr3Sewn6EAes6aJInKc9Q0ztFijMDvd1GpUk74aTfOTlPf8hAs/hCBcNANE
|
3933 |
-
xdqtvArBAs8e5ZTZ845b2EzwnexhF7sUMlQMAimTHpKG9n/v55IFDlndmQguLvqcAFLTxWYp5KeX
|
3934 |
-
RKQOKIETNcX2b2TmQcTVL8w0RSXPQQCWPUouwpaYT05KnJe32x+SMsj/D1Fu1uwJ
|
3935 |
-
-----END CERTIFICATE-----
|
3936 |
-
|
3937 |
-
TrustCor ECA-1
|
3938 |
-
==============
|
3939 |
-
-----BEGIN CERTIFICATE-----
|
3940 |
-
MIIEIDCCAwigAwIBAgIJAISCLF8cYtBAMA0GCSqGSIb3DQEBCwUAMIGcMQswCQYDVQQGEwJQQTEP
|
3941 |
-
MA0GA1UECAwGUGFuYW1hMRQwEgYDVQQHDAtQYW5hbWEgQ2l0eTEkMCIGA1UECgwbVHJ1c3RDb3Ig
|
3942 |
-
U3lzdGVtcyBTLiBkZSBSLkwuMScwJQYDVQQLDB5UcnVzdENvciBDZXJ0aWZpY2F0ZSBBdXRob3Jp
|
3943 |
-
dHkxFzAVBgNVBAMMDlRydXN0Q29yIEVDQS0xMB4XDTE2MDIwNDEyMzIzM1oXDTI5MTIzMTE3Mjgw
|
3944 |
-
N1owgZwxCzAJBgNVBAYTAlBBMQ8wDQYDVQQIDAZQYW5hbWExFDASBgNVBAcMC1BhbmFtYSBDaXR5
|
3945 |
-
MSQwIgYDVQQKDBtUcnVzdENvciBTeXN0ZW1zIFMuIGRlIFIuTC4xJzAlBgNVBAsMHlRydXN0Q29y
|
3946 |
-
IENlcnRpZmljYXRlIEF1dGhvcml0eTEXMBUGA1UEAwwOVHJ1c3RDb3IgRUNBLTEwggEiMA0GCSqG
|
3947 |
-
SIb3DQEBAQUAA4IBDwAwggEKAoIBAQDPj+ARtZ+odnbb3w9U73NjKYKtR8aja+3+XzP4Q1HpGjOR
|
3948 |
-
MRegdMTUpwHmspI+ap3tDvl0mEDTPwOABoJA6LHip1GnHYMma6ve+heRK9jGrB6xnhkB1Zem6g23
|
3949 |
-
xFUfJ3zSCNV2HykVh0A53ThFEXXQmqc04L/NyFIduUd+Dbi7xgz2c1cWWn5DkR9VOsZtRASqnKmc
|
3950 |
-
p0yJF4OuowReUoCLHhIlERnXDH19MURB6tuvsBzvgdAsxZohmz3tQjtQJvLsznFhBmIhVE5/wZ0+
|
3951 |
-
fyCMgMsq2JdiyIMzkX2woloPV+g7zPIlstR8L+xNxqE6FXrntl019fZISjZFZtS6mFjBAgMBAAGj
|
3952 |
-
YzBhMB0GA1UdDgQWBBREnkj1zG1I1KBLf/5ZJC+Dl5mahjAfBgNVHSMEGDAWgBREnkj1zG1I1KBL
|
3953 |
-
f/5ZJC+Dl5mahjAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBhjANBgkqhkiG9w0BAQsF
|
3954 |
-
AAOCAQEABT41XBVwm8nHc2FvcivUwo/yQ10CzsSUuZQRg2dd4mdsdXa/uwyqNsatR5Nj3B5+1t4u
|
3955 |
-
/ukZMjgDfxT2AHMsWbEhBuH7rBiVDKP/mZb3Kyeb1STMHd3BOuCYRLDE5D53sXOpZCz2HAF8P11F
|
3956 |
-
hcCF5yWPldwX8zyfGm6wyuMdKulMY/okYWLW2n62HGz1Ah3UKt1VkOsqEUc8Ll50soIipX1TH0Xs
|
3957 |
-
J5F95yIW6MBoNtjG8U+ARDL54dHRHareqKucBK+tIA5kmE2la8BIWJZpTdwHjFGTot+fDz2LYLSC
|
3958 |
-
jaoITmJF4PkL0uDgPFveXHEnJcLmA4GLEFPjx1WitJ/X5g==
|
3959 |
-
-----END CERTIFICATE-----
|
3960 |
-
|
3961 |
-
SSL.com Root Certification Authority RSA
|
3962 |
-
========================================
|
3963 |
-
-----BEGIN CERTIFICATE-----
|
3964 |
-
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
-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
-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
-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
-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
-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
-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
-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
-
P2FI7bADFB0QDksZ4LtO7IZl/zbzXmcCC52GVWH9ejjt/uIZALdvoVBidXQ8oPrIJZK0bnoix/ge
|
3973 |
-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
-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
-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
-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
-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
-
1xtZPCvM8hnIk2snYxnP/Okm+Mpxm3+T/jRnhE6Z6/yzeAkzcLpmpnbtG3PrGqUNxCITIJRWCk4s
|
3979 |
-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
-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
-
AwIBhjANBgkqhkiG9w0BAQsFAAOCAgEAIBgRlCn7Jp0cHh5wYfGVcpNxJK1ok1iOMq8bs3AD/CUr
|
3982 |
-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
-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
-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
-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
-
MxW3IwiPxg+NQVrdjsW5j+VFP3jbutIbQLH+cU0/4IGiul607BXgk90IH37hVZkLId6Tngr75qNJ
|
3987 |
-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
-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
-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
|
3990 |
-
WuuA8ShYIc2wBlX7Jz9TkHCpBB5XJ7k=
|
3991 |
-
-----END CERTIFICATE-----
|
3992 |
-
|
3993 |
-
SSL.com Root Certification Authority ECC
|
3994 |
-
========================================
|
3995 |
-
-----BEGIN CERTIFICATE-----
|
3996 |
-
MIICjTCCAhSgAwIBAgIIdebfy8FoW6gwCgYIKoZIzj0EAwIwfDELMAkGA1UEBhMCVVMxDjAMBgNV
|
3997 |
-
BAgMBVRleGFzMRAwDgYDVQQHDAdIb3VzdG9uMRgwFgYDVQQKDA9TU0wgQ29ycG9yYXRpb24xMTAv
|
3998 |
-
BgNVBAMMKFNTTC5jb20gUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSBFQ0MwHhcNMTYwMjEy
|
3999 |
-
MTgxNDAzWhcNNDEwMjEyMTgxNDAzWjB8MQswCQYDVQQGEwJVUzEOMAwGA1UECAwFVGV4YXMxEDAO
|
4000 |
-
BgNVBAcMB0hvdXN0b24xGDAWBgNVBAoMD1NTTCBDb3Jwb3JhdGlvbjExMC8GA1UEAwwoU1NMLmNv
|
4001 |
-
bSBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IEVDQzB2MBAGByqGSM49AgEGBSuBBAAiA2IA
|
4002 |
-
BEVuqVDEpiM2nl8ojRfLliJkP9x6jh3MCLOicSS6jkm5BBtHllirLZXI7Z4INcgn64mMU1jrYor+
|
4003 |
-
8FsPazFSY0E7ic3s7LaNGdM0B9y7xgZ/wkWV7Mt/qCPgCemB+vNH06NjMGEwHQYDVR0OBBYEFILR
|
4004 |
-
hXMw5zUE044CkvvlpNHEIejNMA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAUgtGFczDnNQTT
|
4005 |
-
jgKS++Wk0cQh6M0wDgYDVR0PAQH/BAQDAgGGMAoGCCqGSM49BAMCA2cAMGQCMG/n61kRpGDPYbCW
|
4006 |
-
e+0F+S8Tkdzt5fxQaxFGRrMcIQBiu77D5+jNB5n5DQtdcj7EqgIwH7y6C+IwJPt8bYBVCpk+gA0z
|
4007 |
-
5Wajs6O7pdWLjwkspl1+4vAHCGht0nxpbl/f5Wpl
|
4008 |
-
-----END CERTIFICATE-----
|
4009 |
-
|
4010 |
-
SSL.com EV Root Certification Authority RSA R2
|
4011 |
-
==============================================
|
4012 |
-
-----BEGIN CERTIFICATE-----
|
4013 |
-
MIIF6zCCA9OgAwIBAgIIVrYpzTS8ePYwDQYJKoZIhvcNAQELBQAwgYIxCzAJBgNVBAYTAlVTMQ4w
|
4014 |
-
DAYDVQQIDAVUZXhhczEQMA4GA1UEBwwHSG91c3RvbjEYMBYGA1UECgwPU1NMIENvcnBvcmF0aW9u
|
4015 |
-
MTcwNQYDVQQDDC5TU0wuY29tIEVWIFJvb3QgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgUlNBIFIy
|
4016 |
-
MB4XDTE3MDUzMTE4MTQzN1oXDTQyMDUzMDE4MTQzN1owgYIxCzAJBgNVBAYTAlVTMQ4wDAYDVQQI
|
4017 |
-
DAVUZXhhczEQMA4GA1UEBwwHSG91c3RvbjEYMBYGA1UECgwPU1NMIENvcnBvcmF0aW9uMTcwNQYD
|
4018 |
-
VQQDDC5TU0wuY29tIEVWIFJvb3QgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgUlNBIFIyMIICIjAN
|
4019 |
-
BgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAjzZlQOHWTcDXtOlG2mvqM0fNTPl9fb69LT3w23jh
|
4020 |
-
hqXZuglXaO1XPqDQCEGD5yhBJB/jchXQARr7XnAjssufOePPxU7Gkm0mxnu7s9onnQqG6YE3Bf7w
|
4021 |
-
cXHswxzpY6IXFJ3vG2fThVUCAtZJycxa4bH3bzKfydQ7iEGonL3Lq9ttewkfokxykNorCPzPPFTO
|
4022 |
-
Zw+oz12WGQvE43LrrdF9HSfvkusQv1vrO6/PgN3B0pYEW3p+pKk8OHakYo6gOV7qd89dAFmPZiw+
|
4023 |
-
B6KjBSYRaZfqhbcPlgtLyEDhULouisv3D5oi53+aNxPN8k0TayHRwMwi8qFG9kRpnMphNQcAb9Zh
|
4024 |
-
CBHqurj26bNg5U257J8UZslXWNvNh2n4ioYSA0e/ZhN2rHd9NCSFg83XqpyQGp8hLH94t2S42Oim
|
4025 |
-
9HizVcuE0jLEeK6jj2HdzghTreyI/BXkmg3mnxp3zkyPuBQVPWKchjgGAGYS5Fl2WlPAApiiECto
|
4026 |
-
RHuOec4zSnaqW4EWG7WK2NAAe15itAnWhmMOpgWVSbooi4iTsjQc2KRVbrcc0N6ZVTsj9CLg+Slm
|
4027 |
-
JuwgUHfbSguPvuUCYHBBXtSuUDkiFCbLsjtzdFVHB3mBOagwE0TlBIqulhMlQg+5U8Sb/M3kHN48
|
4028 |
-
+qvWBkofZ6aYMBzdLNvcGJVXZsb/XItW9XcCAwEAAaNjMGEwDwYDVR0TAQH/BAUwAwEB/zAfBgNV
|
4029 |
-
HSMEGDAWgBT5YLvU49U09rj1BoAlp3PbRmmonjAdBgNVHQ4EFgQU+WC71OPVNPa49QaAJadz20Zp
|
4030 |
-
qJ4wDgYDVR0PAQH/BAQDAgGGMA0GCSqGSIb3DQEBCwUAA4ICAQBWs47LCp1Jjr+kxJG7ZhcFUZh1
|
4031 |
-
++VQLHqe8RT6q9OKPv+RKY9ji9i0qVQBDb6Thi/5Sm3HXvVX+cpVHBK+Rw82xd9qt9t1wkclf7nx
|
4032 |
-
Y/hoLVUE0fKNsKTPvDxeH3jnpaAgcLAExbf3cqfeIg29MyVGjGSSJuM+LmOW2puMPfgYCdcDzH2G
|
4033 |
-
guDKBAdRUNf/ktUM79qGn5nX67evaOI5JpS6aLe/g9Pqemc9YmeuJeVy6OLk7K4S9ksrPJ/psEDz
|
4034 |
-
OFSz/bdoyNrGj1E8svuR3Bznm53htw1yj+KkxKl4+esUrMZDBcJlOSgYAsOCsp0FvmXtll9ldDz7
|
4035 |
-
CTUue5wT/RsPXcdtgTpWD8w74a8CLyKsRspGPKAcTNZEtF4uXBVmCeEmKf7GUmG6sXP/wwyc5Wxq
|
4036 |
-
lD8UykAWlYTzWamsX0xhk23RO8yilQwipmdnRC652dKKQbNmC1r7fSOl8hqw/96bg5Qu0T/fkreR
|
4037 |
-
rwU7ZcegbLHNYhLDkBvjJc40vG93drEQw/cFGsDWr3RiSBd3kmmQYRzelYB0VI8YHMPzA9C/pEN1
|
4038 |
-
hlMYegouCRw2n5H9gooiS9EOUCXdywMMF8mDAAhONU2Ki+3wApRmLER/y5UnlhetCTCstnEXbosX
|
4039 |
-
9hwJ1C07mKVx01QT2WDz9UtmT/rx7iASjbSsV7FFY6GsdqnC+w==
|
4040 |
-
-----END CERTIFICATE-----
|
4041 |
-
|
4042 |
-
SSL.com EV Root Certification Authority ECC
|
4043 |
-
===========================================
|
4044 |
-
-----BEGIN CERTIFICATE-----
|
4045 |
-
MIIClDCCAhqgAwIBAgIILCmcWxbtBZUwCgYIKoZIzj0EAwIwfzELMAkGA1UEBhMCVVMxDjAMBgNV
|
4046 |
-
BAgMBVRleGFzMRAwDgYDVQQHDAdIb3VzdG9uMRgwFgYDVQQKDA9TU0wgQ29ycG9yYXRpb24xNDAy
|
4047 |
-
BgNVBAMMK1NTTC5jb20gRVYgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSBFQ0MwHhcNMTYw
|
4048 |
-
MjEyMTgxNTIzWhcNNDEwMjEyMTgxNTIzWjB/MQswCQYDVQQGEwJVUzEOMAwGA1UECAwFVGV4YXMx
|
4049 |
-
EDAOBgNVBAcMB0hvdXN0b24xGDAWBgNVBAoMD1NTTCBDb3Jwb3JhdGlvbjE0MDIGA1UEAwwrU1NM
|
4050 |
-
LmNvbSBFViBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IEVDQzB2MBAGByqGSM49AgEGBSuB
|
4051 |
-
BAAiA2IABKoSR5CYG/vvw0AHgyBO8TCCogbR8pKGYfL2IWjKAMTH6kMAVIbc/R/fALhBYlzccBYy
|
4052 |
-
3h+Z1MzFB8gIH2EWB1E9fVwHU+M1OIzfzZ/ZLg1KthkuWnBaBu2+8KGwytAJKaNjMGEwHQYDVR0O
|
4053 |
-
BBYEFFvKXuXe0oGqzagtZFG22XKbl+ZPMA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAUW8pe
|
4054 |
-
5d7SgarNqC1kUbbZcpuX5k8wDgYDVR0PAQH/BAQDAgGGMAoGCCqGSM49BAMCA2gAMGUCMQCK5kCJ
|
4055 |
-
N+vp1RPZytRrJPOwPYdGWBrssd9v+1a6cGvHOMzosYxPD/fxZ3YOg9AeUY8CMD32IygmTMZgh5Mm
|
4056 |
-
m7I1HrrW9zzRHM76JTymGoEVW/MSD2zuZYrJh6j5B+BimoxcSg==
|
4057 |
-
-----END CERTIFICATE-----
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
lib/class-ga-lib-api-client-exception.php
ADDED
@@ -0,0 +1,13 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Google API client exception.
|
4 |
+
*
|
5 |
+
* @package GoogleAnalytics
|
6 |
+
*/
|
7 |
+
|
8 |
+
/**
|
9 |
+
* Google API Client exception.
|
10 |
+
*/
|
11 |
+
class Ga_Lib_Api_Client_Exception extends Exception {
|
12 |
+
|
13 |
+
}
|
lib/{Ga_Lib_Api_Client.php → class-ga-lib-api-client.php}
RENAMED
@@ -1,15 +1,25 @@
|
|
1 |
<?php
|
|
|
|
|
|
|
|
|
|
|
2 |
|
|
|
|
|
|
|
3 |
abstract class Ga_Lib_Api_Client {
|
4 |
|
5 |
/**
|
6 |
* Keeps error messages.
|
|
|
7 |
* @var array
|
8 |
*/
|
9 |
protected $errors = array();
|
10 |
|
11 |
/**
|
12 |
* Returns errors array.
|
|
|
13 |
* @return array
|
14 |
*/
|
15 |
public function get_errors() {
|
@@ -19,24 +29,24 @@ abstract class Ga_Lib_Api_Client {
|
|
19 |
/**
|
20 |
* Calls private API method from context client.
|
21 |
*
|
22 |
-
* @param $callback
|
23 |
-
* @param $args
|
24 |
*
|
25 |
* @return Ga_Lib_Api_Response
|
26 |
*/
|
27 |
-
abstract function call_api_method( $callback, $args );
|
28 |
|
29 |
/**
|
30 |
* Calls api methods.
|
31 |
*
|
32 |
-
* @param string $callback
|
33 |
-
* @param mixed
|
34 |
*
|
35 |
* @return mixed
|
36 |
*/
|
37 |
public function call( $callback, $args = null ) {
|
38 |
try {
|
39 |
-
delete_option('googleanalytics_sherethis_error_log');
|
40 |
return $this->call_api_method( $callback, $args );
|
41 |
} catch ( Ga_Lib_Api_Client_Exception $e ) {
|
42 |
$this->add_error( $e );
|
@@ -56,20 +66,29 @@ abstract class Ga_Lib_Api_Client {
|
|
56 |
/**
|
57 |
* Prepares error data.
|
58 |
*
|
59 |
-
* @param Exception $e
|
60 |
-
*
|
61 |
*/
|
62 |
protected function add_error( Exception $e ) {
|
63 |
-
$this->errors[ $e->getCode() ] = array(
|
|
|
|
|
|
|
64 |
do_action( 'st_support_save_error', $e );
|
65 |
}
|
66 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
67 |
public function add_own_error( $code, $message, $class = '' ) {
|
68 |
-
$this->errors[ $code ] = array(
|
|
|
|
|
|
|
69 |
}
|
70 |
-
|
71 |
-
}
|
72 |
-
|
73 |
-
class Ga_Lib_Api_Client_Exception extends Exception {
|
74 |
-
|
75 |
}
|
1 |
<?php
|
2 |
+
/**
|
3 |
+
* Google API Client.
|
4 |
+
*
|
5 |
+
* @package GoogleAnalytics
|
6 |
+
*/
|
7 |
|
8 |
+
/**
|
9 |
+
* Google API Client.
|
10 |
+
*/
|
11 |
abstract class Ga_Lib_Api_Client {
|
12 |
|
13 |
/**
|
14 |
* Keeps error messages.
|
15 |
+
*
|
16 |
* @var array
|
17 |
*/
|
18 |
protected $errors = array();
|
19 |
|
20 |
/**
|
21 |
* Returns errors array.
|
22 |
+
*
|
23 |
* @return array
|
24 |
*/
|
25 |
public function get_errors() {
|
29 |
/**
|
30 |
* Calls private API method from context client.
|
31 |
*
|
32 |
+
* @param callable $callback Callable function.
|
33 |
+
* @param array $args Array of arguments.
|
34 |
*
|
35 |
* @return Ga_Lib_Api_Response
|
36 |
*/
|
37 |
+
abstract public function call_api_method( $callback, $args );
|
38 |
|
39 |
/**
|
40 |
* Calls api methods.
|
41 |
*
|
42 |
+
* @param string $callback Callback method name.
|
43 |
+
* @param mixed $args Arguments.
|
44 |
*
|
45 |
* @return mixed
|
46 |
*/
|
47 |
public function call( $callback, $args = null ) {
|
48 |
try {
|
49 |
+
delete_option( 'googleanalytics_sherethis_error_log' );
|
50 |
return $this->call_api_method( $callback, $args );
|
51 |
} catch ( Ga_Lib_Api_Client_Exception $e ) {
|
52 |
$this->add_error( $e );
|
66 |
/**
|
67 |
* Prepares error data.
|
68 |
*
|
69 |
+
* @param Exception $e Exception.
|
|
|
70 |
*/
|
71 |
protected function add_error( Exception $e ) {
|
72 |
+
$this->errors[ $e->getCode() ] = array(
|
73 |
+
'class' => get_class( $e ),
|
74 |
+
'message' => $e->getMessage(),
|
75 |
+
);
|
76 |
do_action( 'st_support_save_error', $e );
|
77 |
}
|
78 |
|
79 |
+
/**
|
80 |
+
* Add own error.
|
81 |
+
*
|
82 |
+
* @param string $code Code string.
|
83 |
+
* @param string $message Message.
|
84 |
+
* @param string $class Class name.
|
85 |
+
*
|
86 |
+
* @return void
|
87 |
+
*/
|
88 |
public function add_own_error( $code, $message, $class = '' ) {
|
89 |
+
$this->errors[ $code ] = array(
|
90 |
+
'class' => $class,
|
91 |
+
'message' => $message,
|
92 |
+
);
|
93 |
}
|
|
|
|
|
|
|
|
|
|
|
94 |
}
|
lib/class-ga-lib-api-request-exception.php
ADDED
@@ -0,0 +1,12 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Google API request exception.
|
4 |
+
*
|
5 |
+
* @package GoogleAnalytics
|
6 |
+
*/
|
7 |
+
|
8 |
+
/**
|
9 |
+
* Google API request exception.
|
10 |
+
*/
|
11 |
+
class Ga_Lib_Api_Request_Exception extends Exception {
|
12 |
+
}
|
lib/class-ga-lib-api-request.php
ADDED
@@ -0,0 +1,241 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* API Request library.
|
4 |
+
*
|
5 |
+
* @package GoogleAnalytics
|
6 |
+
*/
|
7 |
+
|
8 |
+
// phpcs:disable Squiz.Commenting.FunctionCommentThrowTag.WrongNumber
|
9 |
+
// phpcs:disable WordPress.WP.AlternativeFunctions
|
10 |
+
// NOTE: Alternative function recommendation for curl noted! Plans to switch to google service library in backlog.
|
11 |
+
|
12 |
+
require_once 'class-ga-lib-api-request-exception.php';
|
13 |
+
|
14 |
+
/**
|
15 |
+
* API Request Library response.
|
16 |
+
*/
|
17 |
+
class Ga_Lib_Api_Request {
|
18 |
+
|
19 |
+
/**
|
20 |
+
* Instance object.
|
21 |
+
*
|
22 |
+
* @var Ga_Lib_Api_Request|null
|
23 |
+
*/
|
24 |
+
public static $instance = null;
|
25 |
+
|
26 |
+
const HEADER_CONTENT_TYPE = 'application/x-www-form-urlencoded';
|
27 |
+
const HEADER_CONTENT_TYPE_JSON = 'Content-type: application/json';
|
28 |
+
const HEADER_ACCEPT = 'Accept: application/json, text/javascript, */*; q=0.01';
|
29 |
+
const TIMEOUT = 5;
|
30 |
+
const USER_AGENT = 'googleanalytics-wordpress-plugin';
|
31 |
+
|
32 |
+
/**
|
33 |
+
* Headers array.
|
34 |
+
*
|
35 |
+
* @var array
|
36 |
+
*/
|
37 |
+
private $headers = array();
|
38 |
+
|
39 |
+
/**
|
40 |
+
* Whether to cache or not.
|
41 |
+
*
|
42 |
+
* @var bool
|
43 |
+
*/
|
44 |
+
private $cache = false;
|
45 |
+
|
46 |
+
/**
|
47 |
+
* Appendix.
|
48 |
+
*
|
49 |
+
* @var string
|
50 |
+
*/
|
51 |
+
private $appendix = '';
|
52 |
+
|
53 |
+
/**
|
54 |
+
* Constructor.
|
55 |
+
*
|
56 |
+
* @param bool $cache Whether to cache or not.
|
57 |
+
* @param string $appendix Appendix string.
|
58 |
+
*/
|
59 |
+
private function __construct( $cache = false, $appendix = '' ) {
|
60 |
+
$this->cache = $cache;
|
61 |
+
$this->appendix = $appendix;
|
62 |
+
}
|
63 |
+
|
64 |
+
/**
|
65 |
+
* Returns API client instance.
|
66 |
+
*
|
67 |
+
* @param bool $cache Whether to cache.
|
68 |
+
* @param string $appendix Appendix string.
|
69 |
+
*
|
70 |
+
* @return Ga_Lib_Api_Request|null
|
71 |
+
*/
|
72 |
+
public static function get_instance( $cache = false, $appendix = '' ) {
|
73 |
+
if ( null === self::$instance ) {
|
74 |
+
self::$instance = new Ga_Lib_Api_Request( $cache, $appendix );
|
75 |
+
}
|
76 |
+
|
77 |
+
return self::$instance;
|
78 |
+
}
|
79 |
+
|
80 |
+
/**
|
81 |
+
* Sets request headers.
|
82 |
+
*
|
83 |
+
* @param array|mixed $headers Headers array.
|
84 |
+
*/
|
85 |
+
public function set_request_headers( $headers ) {
|
86 |
+
if ( is_array( $headers ) ) {
|
87 |
+
$this->headers = array_merge( $this->headers, $headers );
|
88 |
+
} else {
|
89 |
+
$this->headers[] = $headers;
|
90 |
+
}
|
91 |
+
}
|
92 |
+
|
93 |
+
/**
|
94 |
+
* Perform HTTP request.
|
95 |
+
*
|
96 |
+
* @param string $url URL address.
|
97 |
+
* @param string $raw_post_body Raw Post body.
|
98 |
+
* @param boolean $json Whether to append JSON content type.
|
99 |
+
* @param boolean $force_no_cache Whether to force not to cache response data even if cache property is set to true.
|
100 |
+
*
|
101 |
+
* @return array Response object.
|
102 |
+
* @throws Exception Throws exception on error.
|
103 |
+
*/
|
104 |
+
public function make_request( $url, $raw_post_body = null, $json = false, $force_no_cache = false ) {
|
105 |
+
// Return cached data if exist.
|
106 |
+
if ( false === $force_no_cache ) {
|
107 |
+
if ( $this->cache ) {
|
108 |
+
$wp_transient_name = Ga_Cache::get_transient_name( $url, $raw_post_body, $this->appendix );
|
109 |
+
$cached = Ga_Cache::get_cached_result( $wp_transient_name );
|
110 |
+
|
111 |
+
if ( false === empty( $cache ) ) {
|
112 |
+
if ( ! Ga_Cache::is_data_cache_outdated( $wp_transient_name, $this->appendix ) ) {
|
113 |
+
return $cached;
|
114 |
+
}
|
115 |
+
}
|
116 |
+
|
117 |
+
// Check if the next request after error is allowed.
|
118 |
+
if ( false === Ga_Cache::is_next_request_allowed( $wp_transient_name ) ) {
|
119 |
+
throw new Ga_Lib_Api_Client_Exception(
|
120 |
+
__( 'There are temporary connection issues, please try again later.' )
|
121 |
+
);
|
122 |
+
}
|
123 |
+
}
|
124 |
+
}
|
125 |
+
|
126 |
+
if ( false === function_exists( 'curl_init' ) ) {
|
127 |
+
throw new Ga_Lib_Api_Client_Exception(
|
128 |
+
__( 'cURL functions are not available' )
|
129 |
+
);
|
130 |
+
}
|
131 |
+
|
132 |
+
// Set default headers.
|
133 |
+
$this->set_request_headers(
|
134 |
+
array(
|
135 |
+
( $json ? self::HEADER_CONTENT_TYPE_JSON : self::HEADER_CONTENT_TYPE ),
|
136 |
+
self::HEADER_ACCEPT,
|
137 |
+
)
|
138 |
+
);
|
139 |
+
|
140 |
+
$ch = curl_init( $url );
|
141 |
+
$headers = $this->headers;
|
142 |
+
|
143 |
+
$curl_timeout = self::TIMEOUT;
|
144 |
+
$php_execution_time = ini_get( 'max_execution_time' );
|
145 |
+
if ( false === empty( $php_execution_time ) && true === is_numeric( $php_execution_time ) ) {
|
146 |
+
if ( $php_execution_time < 36 && $php_execution_time > 9 ) {
|
147 |
+
$curl_timeout = $php_execution_time - 5;
|
148 |
+
} elseif ( $php_execution_time < 10 ) {
|
149 |
+
$curl_timeout = 5;
|
150 |
+
}
|
151 |
+
}
|
152 |
+
|
153 |
+
// Set the proxy configuration. The user can provide this in wp-config.php.
|
154 |
+
if ( defined( 'WP_PROXY_HOST' ) ) {
|
155 |
+
curl_setopt( $ch, CURLOPT_PROXY, WP_PROXY_HOST );
|
156 |
+
}
|
157 |
+
if ( defined( 'WP_PROXY_PORT' ) ) {
|
158 |
+
curl_setopt( $ch, CURLOPT_PROXYPORT, WP_PROXY_PORT );
|
159 |
+
}
|
160 |
+
if ( defined( 'WP_PROXY_USERNAME' ) ) {
|
161 |
+
$auth = WP_PROXY_USERNAME;
|
162 |
+
if ( defined( 'WP_PROXY_PASSWORD' ) ) {
|
163 |
+
$auth .= ':' . WP_PROXY_PASSWORD;
|
164 |
+
}
|
165 |
+
curl_setopt( $ch, CURLOPT_PROXYUSERPWD, $auth );
|
166 |
+
}
|
167 |
+
|
168 |
+
curl_setopt( $ch, CURLOPT_CONNECTTIMEOUT, $curl_timeout );
|
169 |
+
curl_setopt( $ch, CURLOPT_TIMEOUT, $curl_timeout );
|
170 |
+
curl_setopt( $ch, CURLOPT_HEADER, true );
|
171 |
+
curl_setopt( $ch, CURLOPT_SSL_VERIFYPEER, true );
|
172 |
+
curl_setopt( $ch, CURLOPT_SSL_VERIFYHOST, 2 );
|
173 |
+
|
174 |
+
if ( false === function_exists( 'ini_get' ) || false === ini_get( 'curl.cainfo' ) ) {
|
175 |
+
curl_setopt( $ch, CURLOPT_CAINFO, $this->get_cert_path() );
|
176 |
+
}
|
177 |
+
|
178 |
+
curl_setopt( $ch, CURLINFO_HEADER_OUT, true );
|
179 |
+
curl_setopt( $ch, CURLOPT_HTTPHEADER, $headers );
|
180 |
+
curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true );
|
181 |
+
curl_setopt( $ch, CURLOPT_USERAGENT, self::USER_AGENT );
|
182 |
+
if ( defined( 'CURLOPT_IPRESOLVE' ) && defined( 'CURL_IPRESOLVE_V4' ) ) {
|
183 |
+
curl_setopt( $ch, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4 );
|
184 |
+
}
|
185 |
+
|
186 |
+
// POST body.
|
187 |
+
if ( false === empty( $raw_post_body ) ) {
|
188 |
+
curl_setopt( $ch, CURLOPT_POST, true );
|
189 |
+
curl_setopt(
|
190 |
+
$ch,
|
191 |
+
CURLOPT_POSTFIELDS,
|
192 |
+
( $json ? $raw_post_body : http_build_query( $raw_post_body, null, '&' ) )
|
193 |
+
);
|
194 |
+
}
|
195 |
+
|
196 |
+
// Execute request.
|
197 |
+
$response = curl_exec( $ch );
|
198 |
+
$error = curl_error( $ch );
|
199 |
+
|
200 |
+
if ( false === empty( $error ) ) {
|
201 |
+
$errno = curl_errno( $ch );
|
202 |
+
curl_close( $ch );
|
203 |
+
|
204 |
+
// Store last cache time when unsuccessful.
|
205 |
+
if ( false === $force_no_cache && true === $this->cache ) {
|
206 |
+
Ga_Cache::set_last_cache_time( $wp_transient_name );
|
207 |
+
Ga_Cache::set_last_time_attempt();
|
208 |
+
}
|
209 |
+
|
210 |
+
throw new Ga_Lib_Api_Client_Exception( $error . ' (' . $errno . ')' );
|
211 |
+
} else {
|
212 |
+
$http_code = curl_getinfo( $ch, CURLINFO_HTTP_CODE );
|
213 |
+
$header_size = curl_getinfo( $ch, CURLINFO_HEADER_SIZE );
|
214 |
+
$header = substr( $response, 0, $header_size );
|
215 |
+
$body = substr( $response, $header_size, strlen( $response ) );
|
216 |
+
|
217 |
+
if ( preg_match( '/^(4|5)[0-9]{2}/', $http_code ) ) {
|
218 |
+
throw new Ga_Lib_Api_Request_Exception(
|
219 |
+
404 === $http_code ? sprintf(
|
220 |
+
/* translators: %s stands for the URL. */
|
221 |
+
__( 'Requested URL doesn\'t exists: %s', 'googleanalytics' ),
|
222 |
+
$url
|
223 |
+
) : $body
|
224 |
+
);
|
225 |
+
}
|
226 |
+
|
227 |
+
curl_close( $ch );
|
228 |
+
|
229 |
+
$response_data = array( $header, $body );
|
230 |
+
|
231 |
+
// Cache result.
|
232 |
+
if ( false === $force_no_cache ) {
|
233 |
+
if ( true === $this->cache ) {
|
234 |
+
Ga_Cache::set_cache( $wp_transient_name, $response_data );
|
235 |
+
}
|
236 |
+
}
|
237 |
+
|
238 |
+
return $response_data;
|
239 |
+
}
|
240 |
+
}
|
241 |
+
}
|
lib/class-ga-lib-api-response.php
ADDED
@@ -0,0 +1,113 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* API Response library.
|
4 |
+
*
|
5 |
+
* @package GoogleAnalytics
|
6 |
+
*/
|
7 |
+
|
8 |
+
/**
|
9 |
+
* API Response Library response.
|
10 |
+
*/
|
11 |
+
class Ga_Lib_Api_Response {
|
12 |
+
|
13 |
+
/**
|
14 |
+
* Emtpy response.
|
15 |
+
*
|
16 |
+
* @var string[]
|
17 |
+
*/
|
18 |
+
public static $empty_response = array( '', '' );
|
19 |
+
|
20 |
+
/**
|
21 |
+
* Header.
|
22 |
+
*
|
23 |
+
* @var mixed
|
24 |
+
*/
|
25 |
+
private $header;
|
26 |
+
|
27 |
+
/**
|
28 |
+
* Body.
|
29 |
+
*
|
30 |
+
* @var mixed
|
31 |
+
*/
|
32 |
+
private $body;
|
33 |
+
|
34 |
+
/**
|
35 |
+
* Data.
|
36 |
+
*
|
37 |
+
* @var mixed
|
38 |
+
*/
|
39 |
+
private $data;
|
40 |
+
|
41 |
+
/**
|
42 |
+
* Constructor.
|
43 |
+
*
|
44 |
+
* @param array|null $raw_response Raw response array.
|
45 |
+
*/
|
46 |
+
public function __construct( $raw_response = null ) {
|
47 |
+
if ( false === empty( $raw_response ) ) {
|
48 |
+
$this->set_header( $raw_response[0] );
|
49 |
+
$this->set_body( $raw_response[1] );
|
50 |
+
$this->set_data( json_decode( $raw_response[1], true ) );
|
51 |
+
}
|
52 |
+
}
|
53 |
+
|
54 |
+
/**
|
55 |
+
* Set header.
|
56 |
+
*
|
57 |
+
* @param mixed $header Header.
|
58 |
+
*
|
59 |
+
* @return void
|
60 |
+
*/
|
61 |
+
public function set_header( $header ) {
|
62 |
+
$this->header = $header;
|
63 |
+
}
|
64 |
+
|
65 |
+
/**
|
66 |
+
* Get header.
|
67 |
+
*
|
68 |
+
* @return mixed
|
69 |
+
*/
|
70 |
+
public function get_header() {
|
71 |
+
return $this->header;
|
72 |
+
}
|
73 |
+
|
74 |
+
/**
|
75 |
+
* Set body.
|
76 |
+
*
|
77 |
+
* @param mixed $body Body.
|
78 |
+
*
|
79 |
+
* @return void
|
80 |
+
*/
|
81 |
+
public function set_body( $body ) {
|
82 |
+
$this->body = $body;
|
83 |
+
}
|
84 |
+
|
85 |
+
/**
|
86 |
+
* Get body.
|
87 |
+
*
|
88 |
+
* @return mixed
|
89 |
+
*/
|
90 |
+
public function get_body() {
|
91 |
+
return $this->body;
|
92 |
+
}
|
93 |
+
|
94 |
+
/**
|
95 |
+
* Set data.
|
96 |
+
*
|
97 |
+
* @param mixed $data Data.
|
98 |
+
*
|
99 |
+
* @return void
|
100 |
+
*/
|
101 |
+
public function set_data( $data ) {
|
102 |
+
$this->data = $data;
|
103 |
+
}
|
104 |
+
|
105 |
+
/**
|
106 |
+
* Get data.
|
107 |
+
*
|
108 |
+
* @return mixed
|
109 |
+
*/
|
110 |
+
public function get_data() {
|
111 |
+
return $this->data;
|
112 |
+
}
|
113 |
+
}
|
lib/class-ga-lib-google-api-client-accountsummaries-exception.php
ADDED
@@ -0,0 +1,12 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Google API client account summaries exception.
|
4 |
+
*
|
5 |
+
* @package GoogleAnalytics
|
6 |
+
*/
|
7 |
+
|
8 |
+
/**
|
9 |
+
* Google API client account summaries exception.
|
10 |
+
*/
|
11 |
+
class Ga_Lib_Google_Api_Client_AccountSummaries_Exception extends Ga_Lib_Google_Api_Client_Exception {
|
12 |
+
}
|
lib/class-ga-lib-google-api-client-authcode-exception.php
ADDED
@@ -0,0 +1,45 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Google API client auth code exception.
|
4 |
+
*
|
5 |
+
* @package GoogleAnalytics
|
6 |
+
*/
|
7 |
+
|
8 |
+
/**
|
9 |
+
* Google API client auth code exception.
|
10 |
+
*/
|
11 |
+
class Ga_Lib_Google_Api_Client_AuthCode_Exception extends Ga_Lib_Google_Api_Client_Exception {
|
12 |
+
|
13 |
+
/**
|
14 |
+
* Get error response data.
|
15 |
+
*
|
16 |
+
* @param string $response Response.
|
17 |
+
*
|
18 |
+
* @return array[]
|
19 |
+
*/
|
20 |
+
protected function get_error_response_data( $response ) {
|
21 |
+
$data = json_decode( $response, true );
|
22 |
+
|
23 |
+
$error = $data['error'];
|
24 |
+
|
25 |
+
if ( true === is_array( $error ) && true === isset( $error['message'] ) ) {
|
26 |
+
$error = $error['message'];
|
27 |
+
}
|
28 |
+
|
29 |
+
if ( false === empty( $data['error'] ) ) {
|
30 |
+
return array(
|
31 |
+
'error' => array(
|
32 |
+
'message' => $error,
|
33 |
+
'code' => 500,
|
34 |
+
),
|
35 |
+
);
|
36 |
+
} else {
|
37 |
+
return array(
|
38 |
+
'error' => array(
|
39 |
+
'message' => 'Google API - uknown error.',
|
40 |
+
'code' => 500,
|
41 |
+
),
|
42 |
+
);
|
43 |
+
}
|
44 |
+
}
|
45 |
+
}
|
lib/class-ga-lib-google-api-client-data-exception.php
ADDED
@@ -0,0 +1,12 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Google API client data exception.
|
4 |
+
*
|
5 |
+
* @package GoogleAnalytics
|
6 |
+
*/
|
7 |
+
|
8 |
+
/**
|
9 |
+
* Google API client data exception.
|
10 |
+
*/
|
11 |
+
class Ga_Lib_Google_Api_Client_Data_Exception extends Ga_Lib_Google_Api_Client_Exception {
|
12 |
+
}
|
lib/class-ga-lib-google-api-client-exception.php
ADDED
@@ -0,0 +1,90 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Google API client exception.
|
4 |
+
*
|
5 |
+
* @package GoogleAnalytics
|
6 |
+
*/
|
7 |
+
|
8 |
+
/**
|
9 |
+
* Google API client exception.
|
10 |
+
*/
|
11 |
+
class Ga_Lib_Google_Api_Client_Exception extends Ga_Lib_Api_Client_Exception {
|
12 |
+
/**
|
13 |
+
* Google error response.
|
14 |
+
*
|
15 |
+
* @var string|null
|
16 |
+
*/
|
17 |
+
private $google_error_response = null;
|
18 |
+
|
19 |
+
/**
|
20 |
+
* Constructor.
|
21 |
+
*
|
22 |
+
* @param string $msg Exception message.
|
23 |
+
*/
|
24 |
+
public function __construct( $msg ) {
|
25 |
+
$this->set_google_error_response( $msg );
|
26 |
+
$data = $this->get_error_response_data( $msg );
|
27 |
+
parent::__construct( $data['error']['message'], $data['error']['code'] );
|
28 |
+
}
|
29 |
+
|
30 |
+
/**
|
31 |
+
* Sets google JSON response.
|
32 |
+
* Response structure:
|
33 |
+
* {
|
34 |
+
* "error": {
|
35 |
+
* "code": 403,
|
36 |
+
* "message": "User does not have sufficient permissions for this profile.",
|
37 |
+
* "status": "PERMISSION_DENIED",
|
38 |
+
* "details": [
|
39 |
+
* {
|
40 |
+
* "@type": "type.googleapis.com/google.rpc.DebugInfo",
|
41 |
+
* "detail": "[ORIGINAL ERROR] generic::permission_denied: User does not have sufficient permissions for this profile.
|
42 |
+
* [google.rpc.error_details_ext] { message: \"User does not have sufficient permissions for this profile.\" }"
|
43 |
+
* }
|
44 |
+
* ]
|
45 |
+
* }
|
46 |
+
* }
|
47 |
+
*
|
48 |
+
* @param string $response Response string.
|
49 |
+
*/
|
50 |
+
public function set_google_error_response( $response ) {
|
51 |
+
$this->google_error_response = $response;
|
52 |
+
}
|
53 |
+
|
54 |
+
/**
|
55 |
+
* Get Google error response.
|
56 |
+
*
|
57 |
+
* @return string
|
58 |
+
*/
|
59 |
+
public function get_google_error_response() {
|
60 |
+
return $this->google_error_response;
|
61 |
+
}
|
62 |
+
|
63 |
+
/**
|
64 |
+
* Decodes JSON response
|
65 |
+
*
|
66 |
+
* @param string $response Response string.
|
67 |
+
*
|
68 |
+
* @return array Decoded object array.
|
69 |
+
*/
|
70 |
+
protected function get_error_response_data( $response ) {
|
71 |
+
$data = json_decode( $response, true );
|
72 |
+
if ( is_array( $data['error'] ) && ! empty( $data['error'] ) && ! empty( $data['error']['message'] ) && ! empty( $data['error']['code'] ) ) {
|
73 |
+
return $data;
|
74 |
+
} elseif ( ! empty( $data['error'] ) ) {
|
75 |
+
return array(
|
76 |
+
'error' => array(
|
77 |
+
'message' => $data['error'],
|
78 |
+
'code' => 500,
|
79 |
+
),
|
80 |
+
);
|
81 |
+
} else {
|
82 |
+
return array(
|
83 |
+
'error' => array(
|
84 |
+
'message' => __( 'Google Reporting API - unknown error.' ),
|
85 |
+
'code' => 500,
|
86 |
+
),
|
87 |
+
);
|
88 |
+
}
|
89 |
+
}
|
90 |
+
}
|
lib/class-ga-lib-google-api-client-refreshtoken-exception.php
ADDED
@@ -0,0 +1,12 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Google API client refresh token exception.
|
4 |
+
*
|
5 |
+
* @package GoogleAnalytics
|
6 |
+
*/
|
7 |
+
|
8 |
+
/**
|
9 |
+
* Google API client refresh token exception.
|
10 |
+
*/
|
11 |
+
class Ga_Lib_Google_Api_Client_RefreshToken_Exception extends Ga_Lib_Google_Api_Client_Exception {
|
12 |
+
}
|
lib/{Ga_Lib_Google_Api_Client.php → class-ga-lib-google-api-client.php}
RENAMED
@@ -1,19 +1,45 @@
|
|
1 |
<?php
|
2 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
3 |
class Ga_Lib_Google_Api_Client extends Ga_Lib_Api_Client {
|
4 |
|
5 |
-
|
|
|
|
|
|
|
|
|
|
|
6 |
|
7 |
-
const OAUTH2_REVOKE_ENDPOINT
|
8 |
-
const OAUTH2_TOKEN_ENDPOINT
|
9 |
-
const OAUTH2_AUTH_ENDPOINT
|
10 |
const OAUTH2_FEDERATED_SIGNON_CERTS_ENDPOINT = 'https://www.googleapis.com/oauth2/v1/certs';
|
11 |
-
const GA_ACCOUNT_SUMMARIES_ENDPOINT
|
12 |
-
const GA_DATA_ENDPOINT
|
13 |
-
const OAUTH2_CALLBACK_URI
|
14 |
|
15 |
const USE_CACHE = true;
|
16 |
|
|
|
|
|
|
|
|
|
|
|
17 |
private $disable_cache = false;
|
18 |
|
19 |
/**
|
@@ -27,7 +53,7 @@ class Ga_Lib_Google_Api_Client extends Ga_Lib_Api_Client {
|
|
27 |
'client_id' => '207216681371-433ldmujuv4l0743c1j7g8sci57cb51r.apps.googleusercontent.com',
|
28 |
'client_secret' => 'y0B-K-ODB1KZOam50aMEDhyc',
|
29 |
'scopes' => array( 'https://www.googleapis.com/auth/analytics.readonly' ),
|
30 |
-
'approval_prompt' => 'force'
|
31 |
);
|
32 |
|
33 |
/**
|
@@ -37,6 +63,9 @@ class Ga_Lib_Google_Api_Client extends Ga_Lib_Api_Client {
|
|
37 |
*/
|
38 |
private $token;
|
39 |
|
|
|
|
|
|
|
40 |
private function __construct() {
|
41 |
}
|
42 |
|
@@ -46,20 +75,34 @@ class Ga_Lib_Google_Api_Client extends Ga_Lib_Api_Client {
|
|
46 |
* @return Ga_Lib_Api_Client|null
|
47 |
*/
|
48 |
public static function get_instance() {
|
49 |
-
if ( self::$instance
|
50 |
self::$instance = new Ga_Lib_Google_Api_Client();
|
51 |
}
|
52 |
|
53 |
return self::$instance;
|
54 |
}
|
55 |
|
|
|
|
|
|
|
|
|
|
|
56 |
public function set_disable_cache( $value ) {
|
57 |
$this->disable_cache = $value;
|
58 |
}
|
59 |
|
60 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
61 |
$callback = array( get_class( $this ), $callback );
|
62 |
-
if ( is_callable( $callback ) ) {
|
63 |
try {
|
64 |
if ( ! empty( $args ) ) {
|
65 |
if ( is_array( $args ) ) {
|
@@ -70,20 +113,23 @@ class Ga_Lib_Google_Api_Client extends Ga_Lib_Api_Client {
|
|
70 |
} else {
|
71 |
return call_user_func( $callback );
|
72 |
}
|
73 |
-
|
74 |
} catch ( Ga_Lib_Api_Request_Exception $e ) {
|
75 |
throw new Ga_Lib_Google_Api_Client_Exception( $e->getMessage() );
|
76 |
}
|
77 |
} else {
|
78 |
-
throw new Ga_Lib_Google_Api_Client_Exception(
|
79 |
-
|
|
|
|
|
|
|
|
|
80 |
}
|
81 |
}
|
82 |
|
83 |
/**
|
84 |
* Sets access token.
|
85 |
*
|
86 |
-
* @param $token
|
87 |
*/
|
88 |
public function set_access_token( $token ) {
|
89 |
$this->token = $token;
|
@@ -107,21 +153,22 @@ class Ga_Lib_Google_Api_Client extends Ga_Lib_Api_Client {
|
|
107 |
$params = array(
|
108 |
'response_type' => 'code',
|
109 |
'redirect_uri' => $this->get_redirect_uri(),
|
110 |
-
'client_id' =>
|
111 |
-
'scope' => implode(
|
112 |
-
'access_type' =>
|
113 |
-
'approval_prompt' =>
|
114 |
);
|
115 |
|
116 |
-
return self::OAUTH2_AUTH_ENDPOINT .
|
117 |
}
|
118 |
|
119 |
/**
|
120 |
* Sends request for Access Token during Oauth2 process.
|
121 |
*
|
122 |
-
* @param $access_code
|
123 |
*
|
124 |
* @return Ga_Lib_Api_Response Returns response object
|
|
|
125 |
*/
|
126 |
private function ga_auth_get_access_token( $access_code ) {
|
127 |
$request = array(
|
@@ -129,11 +176,15 @@ class Ga_Lib_Google_Api_Client extends Ga_Lib_Api_Client {
|
|
129 |
'grant_type' => 'authorization_code',
|
130 |
'redirect_uri' => $this->get_redirect_uri(),
|
131 |
'client_id' => $this->config['client_id'],
|
132 |
-
'client_secret' => $this->config['client_secret']
|
133 |
);
|
134 |
try {
|
135 |
-
$response = Ga_Lib_Api_Request::get_instance()->make_request(
|
136 |
-
|
|
|
|
|
|
|
|
|
137 |
} catch ( Ga_Lib_Api_Request_Exception $e ) {
|
138 |
throw new Ga_Lib_Google_Api_Client_AuthCode_Exception( $e->getMessage() );
|
139 |
}
|
@@ -144,21 +195,26 @@ class Ga_Lib_Google_Api_Client extends Ga_Lib_Api_Client {
|
|
144 |
/**
|
145 |
* Sends request to refresh Access Token.
|
146 |
*
|
147 |
-
* @param $refresh_token
|
148 |
*
|
149 |
* @return Ga_Lib_Api_Response
|
|
|
150 |
*/
|
151 |
private function ga_auth_refresh_access_token( $refresh_token ) {
|
152 |
$request = array(
|
153 |
'refresh_token' => $refresh_token,
|
154 |
'grant_type' => 'refresh_token',
|
155 |
'client_id' => $this->config['client_id'],
|
156 |
-
'client_secret' => $this->config['client_secret']
|
157 |
);
|
158 |
|
159 |
try {
|
160 |
-
$response = Ga_Lib_Api_Request::get_instance()->make_request(
|
161 |
-
|
|
|
|
|
|
|
|
|
162 |
} catch ( Ga_Lib_Api_Request_Exception $e ) {
|
163 |
throw new Ga_Lib_Google_Api_Client_RefreshToken_Exception( $e->getMessage() );
|
164 |
}
|
@@ -170,10 +226,11 @@ class Ga_Lib_Google_Api_Client extends Ga_Lib_Api_Client {
|
|
170 |
* Get list of the analytics accounts.
|
171 |
*
|
172 |
* @return Ga_Lib_Api_Response Returns response object
|
|
|
173 |
*/
|
174 |
private function ga_api_account_summaries() {
|
175 |
-
$request
|
176 |
-
$request
|
177 |
try {
|
178 |
$response = $request->make_request( self::GA_ACCOUNT_SUMMARIES_ENDPOINT, null, false, true );
|
179 |
} catch ( Ga_Lib_Api_Request_Exception $e ) {
|
@@ -186,9 +243,11 @@ class Ga_Lib_Google_Api_Client extends Ga_Lib_Api_Client {
|
|
186 |
/**
|
187 |
* Sends request for Google Analytics data using given query parameters.
|
188 |
*
|
189 |
-
* @param $query_params
|
190 |
*
|
191 |
-
* @return Ga_Lib_Api_Response Returns response object
|
|
|
|
|
192 |
*/
|
193 |
private function ga_api_data( $query_params ) {
|
194 |
$request = Ga_Lib_Api_Request::get_instance( $this->is_cache_enabled(), Ga_Helper::get_account_id() );
|
@@ -201,8 +260,11 @@ class Ga_Lib_Google_Api_Client extends Ga_Lib_Api_Client {
|
|
201 |
$quota_user_string = '?quotaUser=' . $quota_user;
|
202 |
}
|
203 |
try {
|
204 |
-
$response = $request->make_request(
|
205 |
-
|
|
|
|
|
|
|
206 |
} catch ( Ga_Lib_Api_Request_Exception $e ) {
|
207 |
throw new Ga_Lib_Google_Api_Client_Data_Exception( $e->getMessage() );
|
208 |
}
|
@@ -214,10 +276,10 @@ class Ga_Lib_Google_Api_Client extends Ga_Lib_Api_Client {
|
|
214 |
* Sign request with Access Token.
|
215 |
* Adds Access Token to the request's headers.
|
216 |
*
|
217 |
-
* @param Ga_Lib_Api_Request $request
|
218 |
*
|
219 |
* @return Ga_Lib_Api_Request Returns response object
|
220 |
-
* @throws Ga_Lib_Api_Client_Exception
|
221 |
*/
|
222 |
private function sign( Ga_Lib_Api_Request $request ) {
|
223 |
if ( empty( $this->token ) ) {
|
@@ -228,7 +290,7 @@ class Ga_Lib_Google_Api_Client extends Ga_Lib_Api_Client {
|
|
228 |
// (or has already expired).
|
229 |
$this->check_access_token();
|
230 |
|
231 |
-
// Add the OAuth2 header to the request
|
232 |
$request->set_request_headers( array( 'Authorization: Bearer ' . $this->token['access_token'] ) );
|
233 |
|
234 |
return $request;
|
@@ -237,15 +299,17 @@ class Ga_Lib_Google_Api_Client extends Ga_Lib_Api_Client {
|
|
237 |
/**
|
238 |
* Refresh and save refreshed Access Token.
|
239 |
*
|
240 |
-
* @param $refresh_token
|
|
|
|
|
241 |
*/
|
242 |
public function refresh_access_token( $refresh_token ) {
|
243 |
-
// Request for a new Access Token
|
244 |
$response = $this->call_api_method( 'ga_auth_refresh_access_token', array( $refresh_token ) );
|
245 |
|
246 |
Ga_Admin::save_access_token( $response, $refresh_token );
|
247 |
|
248 |
-
// Set new access token
|
249 |
$token = Ga_Helper::get_option( Ga_Admin::GA_OAUTH_AUTH_TOKEN_OPTION_NAME );
|
250 |
$this->set_access_token( json_decode( $token, true ) );
|
251 |
}
|
@@ -271,10 +335,11 @@ class Ga_Lib_Google_Api_Client extends Ga_Lib_Api_Client {
|
|
271 |
|
272 |
/**
|
273 |
* Returns if the access_token is expired.
|
|
|
274 |
* @return bool Returns True if the access_token is expired.
|
275 |
*/
|
276 |
public function is_access_token_expired() {
|
277 |
-
if ( null
|
278 |
return true;
|
279 |
}
|
280 |
if ( ! empty( $this->token['error'] ) ) {
|
@@ -286,10 +351,19 @@ class Ga_Lib_Google_Api_Client extends Ga_Lib_Api_Client {
|
|
286 |
return $expired;
|
287 |
}
|
288 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
289 |
private function check_access_token() {
|
290 |
-
if ( $this->is_access_token_expired() ) {
|
291 |
-
if ( empty( $this->token['refresh_token'] ) ) {
|
292 |
-
throw new Ga_Lib_Api_Client_Exception(
|
|
|
|
|
293 |
} else {
|
294 |
$this->refresh_access_token( $this->token['refresh_token'] );
|
295 |
}
|
@@ -297,118 +371,11 @@ class Ga_Lib_Google_Api_Client extends Ga_Lib_Api_Client {
|
|
297 |
}
|
298 |
|
299 |
/**
|
|
|
|
|
300 |
* @return bool
|
301 |
*/
|
302 |
public function is_cache_enabled() {
|
303 |
-
return self::USE_CACHE &&
|
304 |
-
}
|
305 |
-
}
|
306 |
-
|
307 |
-
class Ga_Lib_Google_Api_Client_Exception extends Ga_Lib_Api_Client_Exception {
|
308 |
-
|
309 |
-
private $google_error_response = null;
|
310 |
-
|
311 |
-
function __construct( $msg ) {
|
312 |
-
$this->set_google_error_response( $msg );
|
313 |
-
$data = $this->get_error_response_data( $msg );
|
314 |
-
parent::__construct( $data['error']['message'], $data['error']['code'] );
|
315 |
-
}
|
316 |
-
|
317 |
-
/**
|
318 |
-
* Sets google JSON response.
|
319 |
-
* Response structure:
|
320 |
-
* {
|
321 |
-
*"error": {
|
322 |
-
*"code": 403,
|
323 |
-
*"message": "User does not have sufficient permissions for this profile.",
|
324 |
-
*"status": "PERMISSION_DENIED",
|
325 |
-
*"details": [
|
326 |
-
*{
|
327 |
-
*"@type": "type.googleapis.com/google.rpc.DebugInfo",
|
328 |
-
*"detail": "[ORIGINAL ERROR] generic::permission_denied: User does not have sufficient permissions for this profile.
|
329 |
-
* [google.rpc.error_details_ext] { message: \"User does not have sufficient permissions for this profile.\" }"
|
330 |
-
*}
|
331 |
-
*]
|
332 |
-
*}
|
333 |
-
*}
|
334 |
-
*/
|
335 |
-
public function set_google_error_response( $response ) {
|
336 |
-
$this->google_error_response = $response;
|
337 |
-
}
|
338 |
-
|
339 |
-
public function get_google_error_response() {
|
340 |
-
return $this->google_error_response;
|
341 |
-
}
|
342 |
-
|
343 |
-
/**
|
344 |
-
* Decodes JSON response
|
345 |
-
*
|
346 |
-
* @param $response
|
347 |
-
*
|
348 |
-
* @return array
|
349 |
-
*/
|
350 |
-
protected function get_error_response_data( $response ) {
|
351 |
-
$data = json_decode( $response, true );
|
352 |
-
if ( is_array( $data['error'] ) && ! empty( $data['error'] ) && ! empty( $data['error']['message'] ) && ! empty( $data['error']['code'] ) ) {
|
353 |
-
return $data;
|
354 |
-
} elseif ( ! empty( $data['error'] ) ) {
|
355 |
-
return array(
|
356 |
-
'error' => array(
|
357 |
-
'message' => $data['error'],
|
358 |
-
'code' => 500
|
359 |
-
)
|
360 |
-
);
|
361 |
-
} else {
|
362 |
-
return array(
|
363 |
-
'error' => array(
|
364 |
-
'message' => _( 'Google Reporting API - unknown error.' ),
|
365 |
-
'code' => 500
|
366 |
-
)
|
367 |
-
);
|
368 |
-
}
|
369 |
-
}
|
370 |
-
|
371 |
-
}
|
372 |
-
|
373 |
-
class Ga_Lib_Google_Api_Client_AuthCode_Exception extends Ga_Lib_Google_Api_Client_Exception {
|
374 |
-
function __construct( $msg ) {
|
375 |
-
parent::__construct( $msg );
|
376 |
-
}
|
377 |
-
|
378 |
-
protected function get_error_response_data( $response ) {
|
379 |
-
$data = json_decode( $response, true );
|
380 |
-
if ( ! empty( $data['error'] ) ) {
|
381 |
-
return array(
|
382 |
-
'error' => array(
|
383 |
-
'message' => $data['error'],
|
384 |
-
'code' => 500
|
385 |
-
)
|
386 |
-
);
|
387 |
-
} else {
|
388 |
-
return array(
|
389 |
-
'error' => array(
|
390 |
-
'message' => 'Google API - uknown error.',
|
391 |
-
'code' => 500
|
392 |
-
)
|
393 |
-
);
|
394 |
-
}
|
395 |
-
}
|
396 |
-
}
|
397 |
-
|
398 |
-
class Ga_Lib_Google_Api_Client_Data_Exception extends Ga_Lib_Google_Api_Client_Exception {
|
399 |
-
function __construct( $msg ) {
|
400 |
-
parent::__construct( $msg );
|
401 |
-
}
|
402 |
-
}
|
403 |
-
|
404 |
-
class Ga_Lib_Google_Api_Client_RefreshToken_Exception extends Ga_Lib_Google_Api_Client_Exception {
|
405 |
-
function __construct( $msg ) {
|
406 |
-
parent::__construct( $msg );
|
407 |
-
}
|
408 |
-
}
|
409 |
-
|
410 |
-
class Ga_Lib_Google_Api_Client_AccountSummaries_Exception extends Ga_Lib_Google_Api_Client_Exception {
|
411 |
-
function __construct( $msg ) {
|
412 |
-
parent::__construct( $msg );
|
413 |
}
|
414 |
}
|
1 |
<?php
|
2 |
+
/**
|
3 |
+
* API Client library.
|
4 |
+
*
|
5 |
+
* @package GoogleAnalytics
|
6 |
+
*/
|
7 |
+
|
8 |
+
// phpcs:disable Squiz.Commenting.FunctionCommentThrowTag.WrongNumber
|
9 |
+
|
10 |
+
require_once trailingslashit( __DIR__ ) . 'class-ga-lib-api-client-exception.php';
|
11 |
+
require_once trailingslashit( __DIR__ ) . 'class-ga-lib-google-api-client-exception.php';
|
12 |
+
require_once trailingslashit( __DIR__ ) . 'class-ga-lib-google-api-client-data-exception.php';
|
13 |
+
require_once trailingslashit( __DIR__ ) . 'class-ga-lib-google-api-client-authcode-exception.php';
|
14 |
+
require_once trailingslashit( __DIR__ ) . 'class-ga-lib-google-api-client-accountsummaries-exception.php';
|
15 |
+
|
16 |
+
/**
|
17 |
+
* API Client.
|
18 |
+
*/
|
19 |
class Ga_Lib_Google_Api_Client extends Ga_Lib_Api_Client {
|
20 |
|
21 |
+
/**
|
22 |
+
* Instance object.
|
23 |
+
*
|
24 |
+
* @var Ga_Lib_Api_Client|null
|
25 |
+
*/
|
26 |
+
private static $instance = null;
|
27 |
|
28 |
+
const OAUTH2_REVOKE_ENDPOINT = 'https://accounts.google.com/o/oauth2/revoke';
|
29 |
+
const OAUTH2_TOKEN_ENDPOINT = 'https://accounts.google.com/o/oauth2/token';
|
30 |
+
const OAUTH2_AUTH_ENDPOINT = 'https://accounts.google.com/o/oauth2/auth';
|
31 |
const OAUTH2_FEDERATED_SIGNON_CERTS_ENDPOINT = 'https://www.googleapis.com/oauth2/v1/certs';
|
32 |
+
const GA_ACCOUNT_SUMMARIES_ENDPOINT = 'https://www.googleapis.com/analytics/v3/management/accountSummaries';
|
33 |
+
const GA_DATA_ENDPOINT = 'https://analyticsreporting.googleapis.com/v4/reports:batchGet';
|
34 |
+
const OAUTH2_CALLBACK_URI = 'urn:ietf:wg:oauth:2.0:oob';
|
35 |
|
36 |
const USE_CACHE = true;
|
37 |
|
38 |
+
/**
|
39 |
+
* Disable cache?
|
40 |
+
*
|
41 |
+
* @var bool
|
42 |
+
*/
|
43 |
private $disable_cache = false;
|
44 |
|
45 |
/**
|
53 |
'client_id' => '207216681371-433ldmujuv4l0743c1j7g8sci57cb51r.apps.googleusercontent.com',
|
54 |
'client_secret' => 'y0B-K-ODB1KZOam50aMEDhyc',
|
55 |
'scopes' => array( 'https://www.googleapis.com/auth/analytics.readonly' ),
|
56 |
+
'approval_prompt' => 'force',
|
57 |
);
|
58 |
|
59 |
/**
|
63 |
*/
|
64 |
private $token;
|
65 |
|
66 |
+
/**
|
67 |
+
* Constructor.
|
68 |
+
*/
|
69 |
private function __construct() {
|
70 |
}
|
71 |
|
75 |
* @return Ga_Lib_Api_Client|null
|
76 |
*/
|
77 |
public static function get_instance() {
|
78 |
+
if ( null === self::$instance ) {
|
79 |
self::$instance = new Ga_Lib_Google_Api_Client();
|
80 |
}
|
81 |
|
82 |
return self::$instance;
|
83 |
}
|
84 |
|
85 |
+
/**
|
86 |
+
* Set disable cache.
|
87 |
+
*
|
88 |
+
* @param bool $value True if yes, false if no.
|
89 |
+
*/
|
90 |
public function set_disable_cache( $value ) {
|
91 |
$this->disable_cache = $value;
|
92 |
}
|
93 |
|
94 |
+
/**
|
95 |
+
* Call API method.
|
96 |
+
*
|
97 |
+
* @param callable $callback Callable function.
|
98 |
+
* @param array $args Array of arguments.
|
99 |
+
*
|
100 |
+
* @return false|Ga_Lib_Api_Response|mixed
|
101 |
+
* @throws Ga_Lib_Google_Api_Client_Exception Exception if callable if unknown.
|
102 |
+
*/
|
103 |
+
public function call_api_method( $callback, $args ) {
|
104 |
$callback = array( get_class( $this ), $callback );
|
105 |
+
if ( true === is_callable( $callback ) ) {
|
106 |
try {
|
107 |
if ( ! empty( $args ) ) {
|
108 |
if ( is_array( $args ) ) {
|
113 |
} else {
|
114 |
return call_user_func( $callback );
|
115 |
}
|
|
|
116 |
} catch ( Ga_Lib_Api_Request_Exception $e ) {
|
117 |
throw new Ga_Lib_Google_Api_Client_Exception( $e->getMessage() );
|
118 |
}
|
119 |
} else {
|
120 |
+
throw new Ga_Lib_Google_Api_Client_Exception(
|
121 |
+
'[' . get_class( $this ) . ']Unknown method: ' . print_r( // phpcs:ignore
|
122 |
+
$callback,
|
123 |
+
true
|
124 |
+
)
|
125 |
+
);
|
126 |
}
|
127 |
}
|
128 |
|
129 |
/**
|
130 |
* Sets access token.
|
131 |
*
|
132 |
+
* @param string $token Token string.
|
133 |
*/
|
134 |
public function set_access_token( $token ) {
|
135 |
$this->token = $token;
|
153 |
$params = array(
|
154 |
'response_type' => 'code',
|
155 |
'redirect_uri' => $this->get_redirect_uri(),
|
156 |
+
'client_id' => rawurlencode( $this->config['client_id'] ),
|
157 |
+
'scope' => implode( ' ', $this->config['scopes'] ),
|
158 |
+
'access_type' => rawurlencode( $this->config['access_type'] ),
|
159 |
+
'approval_prompt' => rawurlencode( $this->config['approval_prompt'] ),
|
160 |
);
|
161 |
|
162 |
+
return self::OAUTH2_AUTH_ENDPOINT . '?' . http_build_query( $params, null, '&' );
|
163 |
}
|
164 |
|
165 |
/**
|
166 |
* Sends request for Access Token during Oauth2 process.
|
167 |
*
|
168 |
+
* @param string $access_code Access code.
|
169 |
*
|
170 |
* @return Ga_Lib_Api_Response Returns response object
|
171 |
+
* @throws Ga_Lib_Google_Api_Client_AuthCode_Exception Exception thrown for auth error.
|
172 |
*/
|
173 |
private function ga_auth_get_access_token( $access_code ) {
|
174 |
$request = array(
|
176 |
'grant_type' => 'authorization_code',
|
177 |
'redirect_uri' => $this->get_redirect_uri(),
|
178 |
'client_id' => $this->config['client_id'],
|
179 |
+
'client_secret' => $this->config['client_secret'],
|
180 |
);
|
181 |
try {
|
182 |
+
$response = Ga_Lib_Api_Request::get_instance()->make_request(
|
183 |
+
self::OAUTH2_TOKEN_ENDPOINT,
|
184 |
+
$request,
|
185 |
+
false,
|
186 |
+
true
|
187 |
+
);
|
188 |
} catch ( Ga_Lib_Api_Request_Exception $e ) {
|
189 |
throw new Ga_Lib_Google_Api_Client_AuthCode_Exception( $e->getMessage() );
|
190 |
}
|
195 |
/**
|
196 |
* Sends request to refresh Access Token.
|
197 |
*
|
198 |
+
* @param string $refresh_token Refresh token string.
|
199 |
*
|
200 |
* @return Ga_Lib_Api_Response
|
201 |
+
* @throws Ga_Lib_Google_Api_Client_RefreshToken_Exception Throws error on failed refresh token fetch.
|
202 |
*/
|
203 |
private function ga_auth_refresh_access_token( $refresh_token ) {
|
204 |
$request = array(
|
205 |
'refresh_token' => $refresh_token,
|
206 |
'grant_type' => 'refresh_token',
|
207 |
'client_id' => $this->config['client_id'],
|
208 |
+
'client_secret' => $this->config['client_secret'],
|
209 |
);
|
210 |
|
211 |
try {
|
212 |
+
$response = Ga_Lib_Api_Request::get_instance()->make_request(
|
213 |
+
self::OAUTH2_TOKEN_ENDPOINT,
|
214 |
+
$request,
|
215 |
+
false,
|
216 |
+
true
|
217 |
+
);
|
218 |
} catch ( Ga_Lib_Api_Request_Exception $e ) {
|
219 |
throw new Ga_Lib_Google_Api_Client_RefreshToken_Exception( $e->getMessage() );
|
220 |
}
|
226 |
* Get list of the analytics accounts.
|
227 |
*
|
228 |
* @return Ga_Lib_Api_Response Returns response object
|
229 |
+
* @throws Ga_Lib_Google_Api_Client_AccountSummaries_Exception On failed account summaries fetch.
|
230 |
*/
|
231 |
private function ga_api_account_summaries() {
|
232 |
+
$request = Ga_Lib_Api_Request::get_instance();
|
233 |
+
$request = $this->sign( $request );
|
234 |
try {
|
235 |
$response = $request->make_request( self::GA_ACCOUNT_SUMMARIES_ENDPOINT, null, false, true );
|
236 |
} catch ( Ga_Lib_Api_Request_Exception $e ) {
|
243 |
/**
|
244 |
* Sends request for Google Analytics data using given query parameters.
|
245 |
*
|
246 |
+
* @param array $query_params Query params array.
|
247 |
*
|
248 |
+
* @return Ga_Lib_Api_Response Returns response object.
|
249 |
+
* @throws Ga_Lib_Google_Api_Client_Data_Exception On failed client data.
|
250 |
+
* @throws Ga_Lib_Api_Client_Exception On failed data fetch.
|
251 |
*/
|
252 |
private function ga_api_data( $query_params ) {
|
253 |
$request = Ga_Lib_Api_Request::get_instance( $this->is_cache_enabled(), Ga_Helper::get_account_id() );
|
260 |
$quota_user_string = '?quotaUser=' . $quota_user;
|
261 |
}
|
262 |
try {
|
263 |
+
$response = $request->make_request(
|
264 |
+
self::GA_DATA_ENDPOINT . $quota_user_string,
|
265 |
+
wp_json_encode( $query_params ),
|
266 |
+
true
|
267 |
+
);
|
268 |
} catch ( Ga_Lib_Api_Request_Exception $e ) {
|
269 |
throw new Ga_Lib_Google_Api_Client_Data_Exception( $e->getMessage() );
|
270 |
}
|
276 |
* Sign request with Access Token.
|
277 |
* Adds Access Token to the request's headers.
|
278 |
*
|
279 |
+
* @param Ga_Lib_Api_Request $request Request object.
|
280 |
*
|
281 |
* @return Ga_Lib_Api_Request Returns response object
|
282 |
+
* @throws Ga_Lib_Api_Client_Exception Throws client exception if access token not available.
|
283 |
*/
|
284 |
private function sign( Ga_Lib_Api_Request $request ) {
|
285 |
if ( empty( $this->token ) ) {
|
290 |
// (or has already expired).
|
291 |
$this->check_access_token();
|
292 |
|
293 |
+
// Add the OAuth2 header to the request.
|
294 |
$request->set_request_headers( array( 'Authorization: Bearer ' . $this->token['access_token'] ) );
|
295 |
|
296 |
return $request;
|
299 |
/**
|
300 |
* Refresh and save refreshed Access Token.
|
301 |
*
|
302 |
+
* @param string $refresh_token Refresh token string.
|
303 |
+
*
|
304 |
+
* @throws Ga_Lib_Google_Api_Client_Exception Throws exception if refresh token fails.
|
305 |
*/
|
306 |
public function refresh_access_token( $refresh_token ) {
|
307 |
+
// Request for a new Access Token.
|
308 |
$response = $this->call_api_method( 'ga_auth_refresh_access_token', array( $refresh_token ) );
|
309 |
|
310 |
Ga_Admin::save_access_token( $response, $refresh_token );
|
311 |
|
312 |
+
// Set new access token.
|
313 |
$token = Ga_Helper::get_option( Ga_Admin::GA_OAUTH_AUTH_TOKEN_OPTION_NAME );
|
314 |
$this->set_access_token( json_decode( $token, true ) );
|
315 |
}
|
335 |
|
336 |
/**
|
337 |
* Returns if the access_token is expired.
|
338 |
+
*
|
339 |
* @return bool Returns True if the access_token is expired.
|
340 |
*/
|
341 |
public function is_access_token_expired() {
|
342 |
+
if ( null === $this->token ) {
|
343 |
return true;
|
344 |
}
|
345 |
if ( ! empty( $this->token['error'] ) ) {
|
351 |
return $expired;
|
352 |
}
|
353 |
|
354 |
+
/**
|
355 |
+
* Check access token.
|
356 |
+
*
|
357 |
+
* @return void
|
358 |
+
* @throws Ga_Lib_Api_Client_Exception Throws client exception for failed fresh token.
|
359 |
+
* @throws Ga_Lib_Google_Api_Client_Exception Throws Api client exception for failed fresh token.
|
360 |
+
*/
|
361 |
private function check_access_token() {
|
362 |
+
if ( true === $this->is_access_token_expired() ) {
|
363 |
+
if ( true === empty( $this->token['refresh_token'] ) ) {
|
364 |
+
throw new Ga_Lib_Api_Client_Exception(
|
365 |
+
__( 'Refresh token is not available. Please re-authenticate.' )
|
366 |
+
);
|
367 |
} else {
|
368 |
$this->refresh_access_token( $this->token['refresh_token'] );
|
369 |
}
|
371 |
}
|
372 |
|
373 |
/**
|
374 |
+
* Is cache enabled?
|
375 |
+
*
|
376 |
* @return bool
|
377 |
*/
|
378 |
public function is_cache_enabled() {
|
379 |
+
return true === self::USE_CACHE && false === $this->disable_cache;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
380 |
}
|
381 |
}
|
lib/class-ga-lib-sharethis-api-client-alerts-exception.php
ADDED
@@ -0,0 +1,12 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* ShareThis API Client Alerts exception.
|
4 |
+
*
|
5 |
+
* @package GoogleAnalytics
|
6 |
+
*/
|
7 |
+
|
8 |
+
/**
|
9 |
+
* ShareThis API Client Alerts exception.
|
10 |
+
*/
|
11 |
+
class Ga_Lib_Sharethis_Api_Client_Alerts_Exception extends Ga_Lib_Sharethis_Api_Client_Exception {
|
12 |
+
}
|
lib/class-ga-lib-sharethis-api-client-exception.php
ADDED
@@ -0,0 +1,22 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* ShareThis API client exception.
|
4 |
+
*
|
5 |
+
* @package GoogleAnalytics
|
6 |
+
*/
|
7 |
+
|
8 |
+
/**
|
9 |
+
* ShareThis API client exception.
|
10 |
+
*/
|
11 |
+
class Ga_Lib_Sharethis_Api_Client_Exception extends Ga_Lib_Api_Client_Exception {
|
12 |
+
|
13 |
+
/**
|
14 |
+
* Constructor.
|
15 |
+
*
|
16 |
+
* @param string $msg Message object.
|
17 |
+
*/
|
18 |
+
public function __construct( $msg ) {
|
19 |
+
$data = json_decode( $msg, true );
|
20 |
+
parent::__construct( ! empty( $data['error'] ) ? $data['error'] : $msg );
|
21 |
+
}
|
22 |
+
}
|
lib/class-ga-lib-sharethis-api-client-invaliddomain-exception.php
ADDED
@@ -0,0 +1,12 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* ShareThis API Client Invalid Domain Exception.
|
4 |
+
*
|
5 |
+
* @package GoogleAnalytics
|
6 |
+
*/
|
7 |
+
|
8 |
+
/**
|
9 |
+
* ShareThis API Client Invalid Domain Exception.
|
10 |
+
*/
|
11 |
+
class Ga_Lib_Sharethis_Api_Client_InvalidDomain_Exception extends Ga_Lib_Sharethis_Api_Client_Exception {
|
12 |
+
}
|
lib/class-ga-lib-sharethis-api-client-invite-exception.php
ADDED
@@ -0,0 +1,12 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* ShareThis API Client Invite exception.
|
4 |
+
*
|
5 |
+
* @package GoogleAnalytics
|
6 |
+
*/
|
7 |
+
|
8 |
+
/**
|
9 |
+
* ShareThis API Client Invite exception.
|
10 |
+
*/
|
11 |
+
class Ga_Lib_Sharethis_Api_Client_Invite_Exception extends Ga_Lib_Sharethis_Api_Client_Exception {
|
12 |
+
}
|
lib/class-ga-lib-sharethis-api-client-verify-exception.php
ADDED
@@ -0,0 +1,12 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* ShareThis API Client Verify exception.
|
4 |
+
*
|
5 |
+
* @package GoogleAnalytics
|
6 |
+
*/
|
7 |
+
|
8 |
+
/**
|
9 |
+
* ShareThis API Client Verify exception.
|
10 |
+
*/
|
11 |
+
class Ga_Lib_Sharethis_Api_Client_Verify_Exception extends Ga_Lib_Sharethis_Api_Client_Exception {
|
12 |
+
}
|
lib/{Ga_Lib_Sharethis_Api_Client.php → class-ga-lib-sharethis-api-client.php}
RENAMED
@@ -1,13 +1,36 @@
|
|
1 |
<?php
|
2 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
3 |
class Ga_Lib_Sharethis_Api_Client extends Ga_Lib_Api_Client {
|
4 |
|
5 |
-
|
|
|
|
|
|
|
|
|
|
|
6 |
|
7 |
const GA_SHARETHIS_ENDPOINT = 'platform-api.sharethis.com/v1.0/property';
|
8 |
|
9 |
const USE_CACHE = false;
|
10 |
|
|
|
|
|
|
|
11 |
private function __construct() {}
|
12 |
|
13 |
/**
|
@@ -16,18 +39,27 @@ class Ga_Lib_Sharethis_Api_Client extends Ga_Lib_Api_Client {
|
|
16 |
* @return Ga_Lib_Api_Client|null
|
17 |
*/
|
18 |
public static function get_instance() {
|
19 |
-
if ( self::$instance
|
20 |
self::$instance = new Ga_Lib_Sharethis_Api_Client();
|
21 |
}
|
22 |
|
23 |
return self::$instance;
|
24 |
}
|
25 |
|
26 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
27 |
$callback = array( get_class( $this ), $callback );
|
28 |
if ( is_callable( $callback ) ) {
|
29 |
try {
|
30 |
-
if ( !empty( $args ) ) {
|
31 |
if ( is_array( $args ) ) {
|
32 |
return call_user_func_array( $callback, $args );
|
33 |
} else {
|
@@ -47,14 +79,19 @@ class Ga_Lib_Sharethis_Api_Client extends Ga_Lib_Api_Client {
|
|
47 |
/**
|
48 |
* Sends request for Sharethis api
|
49 |
*
|
50 |
-
* @param $query_params
|
51 |
*
|
52 |
* @return Ga_Lib_Api_Response Returns response object
|
|
|
53 |
*/
|
54 |
private function ga_api_create_sharethis_property( $query_params ) {
|
55 |
-
$request = Ga_Lib_Api_Request::get_instance(self::USE_CACHE);
|
56 |
try {
|
57 |
-
$response = $request->make_request(
|
|
|
|
|
|
|
|
|
58 |
} catch ( Ga_Lib_Api_Request_Exception $e ) {
|
59 |
throw new Ga_Lib_Sharethis_Api_Client_InvalidDomain_Exception( $e->getMessage() );
|
60 |
}
|
@@ -62,8 +99,16 @@ class Ga_Lib_Sharethis_Api_Client extends Ga_Lib_Api_Client {
|
|
62 |
return new Ga_Lib_Api_Response( $response );
|
63 |
}
|
64 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
65 |
private function ga_api_sharethis_installation_verification( $query_params ) {
|
66 |
-
$request = Ga_Lib_Api_Request::get_instance(self::USE_CACHE);
|
67 |
try {
|
68 |
$response = $request->make_request( 'https://' . self::GA_SHARETHIS_ENDPOINT . '/verify', wp_json_encode( $query_params ), true );
|
69 |
} catch ( Ga_Lib_Api_Request_Exception $e ) {
|
@@ -73,8 +118,16 @@ class Ga_Lib_Sharethis_Api_Client extends Ga_Lib_Api_Client {
|
|
73 |
return new Ga_Lib_Api_Response( $response );
|
74 |
}
|
75 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
76 |
private function ga_api_sharethis_user_invite( $query_params ) {
|
77 |
-
$request = Ga_Lib_Api_Request::get_instance(self::USE_CACHE);
|
78 |
try {
|
79 |
$response = $request->make_request( 'https://' . self::GA_SHARETHIS_ENDPOINT . '/user/join', wp_json_encode( $query_params ), true );
|
80 |
} catch ( Ga_Lib_Api_Request_Exception $e ) {
|
@@ -84,49 +137,14 @@ class Ga_Lib_Sharethis_Api_Client extends Ga_Lib_Api_Client {
|
|
84 |
return new Ga_Lib_Api_Response( $response );
|
85 |
}
|
86 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
87 |
private function add_protocol( $url ) {
|
88 |
return ( is_ssl() ) ? 'https://' . $url : 'http://' . $url;
|
89 |
}
|
90 |
-
|
91 |
-
}
|
92 |
-
|
93 |
-
class Ga_Lib_Sharethis_Api_Client_Exception extends Ga_Lib_Api_Client_Exception {
|
94 |
-
|
95 |
-
function __construct( $msg ) {
|
96 |
-
$data = json_decode( $msg, true );
|
97 |
-
parent::__construct( !empty( $data[ 'error' ] ) ? $data[ 'error' ] : $msg );
|
98 |
-
}
|
99 |
-
|
100 |
-
}
|
101 |
-
|
102 |
-
class Ga_Lib_Sharethis_Api_Client_InvalidDomain_Exception extends Ga_Lib_Sharethis_Api_Client_Exception {
|
103 |
-
|
104 |
-
function __construct( $msg ) {
|
105 |
-
parent::__construct( $msg );
|
106 |
-
}
|
107 |
-
|
108 |
-
}
|
109 |
-
|
110 |
-
class Ga_Lib_Sharethis_Api_Client_Invite_Exception extends Ga_Lib_Sharethis_Api_Client_Exception {
|
111 |
-
|
112 |
-
function __construct( $msg ) {
|
113 |
-
parent::__construct( $msg );
|
114 |
-
}
|
115 |
-
|
116 |
-
}
|
117 |
-
|
118 |
-
class Ga_Lib_Sharethis_Api_Client_Alerts_Exception extends Ga_Lib_Sharethis_Api_Client_Exception {
|
119 |
-
|
120 |
-
function __construct( $msg ) {
|
121 |
-
parent::__construct( $msg );
|
122 |
-
}
|
123 |
-
|
124 |
-
}
|
125 |
-
|
126 |
-
class Ga_Lib_Sharethis_Api_Client_Verify_Exception extends Ga_Lib_Sharethis_Api_Client_Exception {
|
127 |
-
|
128 |
-
function __construct( $msg ) {
|
129 |
-
parent::__construct( $msg );
|
130 |
-
}
|
131 |
-
|
132 |
}
|
1 |
<?php
|
2 |
+
/**
|
3 |
+
* ShareThis API Client.
|
4 |
+
*
|
5 |
+
* @package GoogleAnalytics
|
6 |
+
*/
|
7 |
+
|
8 |
+
// Requires.
|
9 |
+
require_once 'class-ga-lib-sharethis-api-client-exception.php';
|
10 |
+
require_once 'class-ga-lib-sharethis-api-client-invaliddomain-exception.php';
|
11 |
+
require_once 'class-ga-lib-sharethis-api-client-invite-exception.php';
|
12 |
+
require_once 'class-ga-lib-sharethis-api-client-alerts-exception.php';
|
13 |
+
require_once 'class-ga-lib-sharethis-api-client-verify-exception.php';
|
14 |
+
|
15 |
+
/**
|
16 |
+
* ShareThis API Client.
|
17 |
+
*/
|
18 |
class Ga_Lib_Sharethis_Api_Client extends Ga_Lib_Api_Client {
|
19 |
|
20 |
+
/**
|
21 |
+
* ShareThis API client instance.
|
22 |
+
*
|
23 |
+
* @var Ga_Lib_Sharethis_Api_Client|null
|
24 |
+
*/
|
25 |
+
public static $instance = null;
|
26 |
|
27 |
const GA_SHARETHIS_ENDPOINT = 'platform-api.sharethis.com/v1.0/property';
|
28 |
|
29 |
const USE_CACHE = false;
|
30 |
|
31 |
+
/**
|
32 |
+
* Private constructor.
|
33 |
+
*/
|
34 |
private function __construct() {}
|
35 |
|
36 |
/**
|
39 |
* @return Ga_Lib_Api_Client|null
|
40 |
*/
|
41 |
public static function get_instance() {
|
42 |
+
if ( null === self::$instance ) {
|
43 |
self::$instance = new Ga_Lib_Sharethis_Api_Client();
|
44 |
}
|
45 |
|
46 |
return self::$instance;
|
47 |
}
|
48 |
|
49 |
+
/**
|
50 |
+
* Call API method.
|
51 |
+
*
|
52 |
+
* @param callable $callback Callable callback.
|
53 |
+
* @param array $args Array of arguments.
|
54 |
+
*
|
55 |
+
* @return false|Ga_Lib_Api_Response|mixed
|
56 |
+
* @throws Ga_Lib_Sharethis_Api_Client_Exception API client exception.
|
57 |
+
*/
|
58 |
+
public function call_api_method( $callback, $args ) {
|
59 |
$callback = array( get_class( $this ), $callback );
|
60 |
if ( is_callable( $callback ) ) {
|
61 |
try {
|
62 |
+
if ( ! empty( $args ) ) {
|
63 |
if ( is_array( $args ) ) {
|
64 |
return call_user_func_array( $callback, $args );
|
65 |
} else {
|
79 |
/**
|
80 |
* Sends request for Sharethis api
|
81 |
*
|
82 |
+
* @param array $query_params Query parameters.
|
83 |
*
|
84 |
* @return Ga_Lib_Api_Response Returns response object
|
85 |
+
* @throws Ga_Lib_Sharethis_Api_Client_InvalidDomain_Exception Invalid domain exception.
|
86 |
*/
|
87 |
private function ga_api_create_sharethis_property( $query_params ) {
|
88 |
+
$request = Ga_Lib_Api_Request::get_instance( self::USE_CACHE );
|
89 |
try {
|
90 |
+
$response = $request->make_request(
|
91 |
+
$this->add_protocol( self::GA_SHARETHIS_ENDPOINT ),
|
92 |
+
wp_json_encode( $query_params ),
|
93 |
+
true
|
94 |
+
);
|
95 |
} catch ( Ga_Lib_Api_Request_Exception $e ) {
|
96 |
throw new Ga_Lib_Sharethis_Api_Client_InvalidDomain_Exception( $e->getMessage() );
|
97 |
}
|
99 |
return new Ga_Lib_Api_Response( $response );
|
100 |
}
|
101 |
|
102 |
+
/**
|
103 |
+
* Installation verification check.
|
104 |
+
*
|
105 |
+
* @param array $query_params Query parameters.
|
106 |
+
*
|
107 |
+
* @return Ga_Lib_Api_Response
|
108 |
+
* @throws Ga_Lib_Sharethis_Api_Client_Verify_Exception Client verification exception.
|
109 |
+
*/
|
110 |
private function ga_api_sharethis_installation_verification( $query_params ) {
|
111 |
+
$request = Ga_Lib_Api_Request::get_instance( self::USE_CACHE );
|
112 |
try {
|
113 |
$response = $request->make_request( 'https://' . self::GA_SHARETHIS_ENDPOINT . '/verify', wp_json_encode( $query_params ), true );
|
114 |
} catch ( Ga_Lib_Api_Request_Exception $e ) {
|
118 |
return new Ga_Lib_Api_Response( $response );
|
119 |
}
|
120 |
|
121 |
+
/**
|
122 |
+
* User invite call.
|
123 |
+
*
|
124 |
+
* @param array $query_params Query parameters.
|
125 |
+
*
|
126 |
+
* @return Ga_Lib_Api_Response
|
127 |
+
* @throws Ga_Lib_Sharethis_Api_Client_Invite_Exception Client invitation exception.
|
128 |
+
*/
|
129 |
private function ga_api_sharethis_user_invite( $query_params ) {
|
130 |
+
$request = Ga_Lib_Api_Request::get_instance( self::USE_CACHE );
|
131 |
try {
|
132 |
$response = $request->make_request( 'https://' . self::GA_SHARETHIS_ENDPOINT . '/user/join', wp_json_encode( $query_params ), true );
|
133 |
} catch ( Ga_Lib_Api_Request_Exception $e ) {
|
137 |
return new Ga_Lib_Api_Response( $response );
|
138 |
}
|
139 |
|
140 |
+
/**
|
141 |
+
* Add correct protocol based on HTTP/HTTPS.
|
142 |
+
*
|
143 |
+
* @param string $url URL string.
|
144 |
+
*
|
145 |
+
* @return string Modified URL string.
|
146 |
+
*/
|
147 |
private function add_protocol( $url ) {
|
148 |
return ( is_ssl() ) ? 'https://' . $url : 'http://' . $url;
|
149 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
150 |
}
|
overwrite/ga-overwrite.php
ADDED
@@ -0,0 +1,19 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Overwrite helpers.
|
4 |
+
*
|
5 |
+
* @package GoogleAnalytics
|
6 |
+
*/
|
7 |
+
|
8 |
+
if ( false === function_exists( 'wp_json_encode' ) ) {
|
9 |
+
/**
|
10 |
+
* Encode a variable into JSON.
|
11 |
+
*
|
12 |
+
* @param mixed $data Variable (usually an array or object) to encode as JSON.
|
13 |
+
*
|
14 |
+
* @return false|string The JSON encoded string, or false if it cannot be encoded.
|
15 |
+
*/
|
16 |
+
function wp_json_encode( $data ) {
|
17 |
+
return json_encode( $data ); // phpcs:ignore
|
18 |
+
}
|
19 |
+
}
|
overwrite/ga_overwrite.php
DELETED
@@ -1,13 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
/**
|
3 |
-
* Created by PhpStorm.
|
4 |
-
* User: mdn
|
5 |
-
* Date: 2016-12-08
|
6 |
-
* Time: 09:15
|
7 |
-
*/
|
8 |
-
|
9 |
-
if ( ! function_exists( 'wp_json_encode' ) ) {
|
10 |
-
function wp_json_encode( $data ) {
|
11 |
-
return json_encode( $data );
|
12 |
-
}
|
13 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
readme.txt
CHANGED
@@ -2,8 +2,9 @@
|
|
2 |
Contributors: sharethis, scottstorebloom, scottmweaver
|
3 |
Tags: analytics, google analytics, google analytics plugin, google analytics widget, google analytics dashboard
|
4 |
Requires at least: 5.2
|
5 |
-
Tested up to: 5.
|
6 |
-
Stable tag: 2.5.
|
|
|
7 |
|
8 |
Use Google Analytics on your WordPress site without touching any code, and view visitor reports right in your WordPress admin dashboard!
|
9 |
|
@@ -114,15 +115,22 @@ If you’re using Google Analytics on your WordPress website or a plugin like th
|
|
114 |
|
115 |
== Changelog ==
|
116 |
|
117 |
-
= 2.5.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
118 |
* Fix dashboard widget.
|
119 |
* Test plugin with WordPress 5.8.3.
|
120 |
|
121 |
-
= 2.5.3
|
122 |
* Fix sending of demographic data once per month.
|
123 |
* Test plugin with WordPress 5.8.1.
|
124 |
|
125 |
-
= 2.5.2
|
126 |
* Add custom date range selector instead of 7/30-day selector.
|
127 |
* Add device breakdown under demographics section.
|
128 |
* Fix security issue for URL in admin.
|
2 |
Contributors: sharethis, scottstorebloom, scottmweaver
|
3 |
Tags: analytics, google analytics, google analytics plugin, google analytics widget, google analytics dashboard
|
4 |
Requires at least: 5.2
|
5 |
+
Tested up to: 5.9.1
|
6 |
+
Stable tag: 2.5.5
|
7 |
+
Version: 2.5.5
|
8 |
|
9 |
Use Google Analytics on your WordPress site without touching any code, and view visitor reports right in your WordPress admin dashboard!
|
10 |
|
115 |
|
116 |
== Changelog ==
|
117 |
|
118 |
+
= 2.5.5 =
|
119 |
+
* Add code improvements.
|
120 |
+
* Improve sanitization and localization.
|
121 |
+
* Test with WordPress 6.0.
|
122 |
+
* Test with PHP 8.0.
|
123 |
+
* Fix privacy policy link.
|
124 |
+
|
125 |
+
= 2.5.4 =
|
126 |
* Fix dashboard widget.
|
127 |
* Test plugin with WordPress 5.8.3.
|
128 |
|
129 |
+
= 2.5.3 =
|
130 |
* Fix sending of demographic data once per month.
|
131 |
* Test plugin with WordPress 5.8.1.
|
132 |
|
133 |
+
= 2.5.2 =
|
134 |
* Add custom date range selector instead of 7/30-day selector.
|
135 |
* Add device breakdown under demographics section.
|
136 |
* Fix security issue for URL in admin.
|
screenshot-1.png
DELETED
Binary file
|
screenshot-2.png
DELETED
Binary file
|
screenshot-3.png
DELETED
Binary file
|
screenshot-4.png
DELETED
Binary file
|
tools/{Ga_Cache.php → class-ga-cache.php}
RENAMED
@@ -1,12 +1,12 @@
|
|
1 |
<?php
|
2 |
-
|
3 |
/**
|
4 |
-
*
|
5 |
*
|
6 |
-
*
|
7 |
-
|
8 |
-
|
9 |
-
|
|
|
10 |
*/
|
11 |
class Ga_Cache {
|
12 |
|
@@ -25,12 +25,22 @@ class Ga_Cache {
|
|
25 |
|
26 |
const GA_WAIT_AFTER_ERROR_TIME = 300; // 60 * 5 = 5 min
|
27 |
|
|
|
|
|
|
|
|
|
|
|
28 |
public static function add_cache_options() {
|
29 |
add_option( self::GA_LAST_CACHE_OPTION_NAME );
|
30 |
add_option( self::GA_BUFFER_CACHE_OPTION_NAME );
|
31 |
add_option( self::GA_LAST_TIME_ATTEMPT_OPTION_NAME );
|
32 |
}
|
33 |
|
|
|
|
|
|
|
|
|
|
|
34 |
public static function delete_cache_options() {
|
35 |
delete_option( self::GA_LAST_CACHE_OPTION_NAME );
|
36 |
delete_option( self::GA_BUFFER_CACHE_OPTION_NAME );
|
@@ -40,50 +50,49 @@ class Ga_Cache {
|
|
40 |
/**
|
41 |
* Generates transient name.
|
42 |
*
|
43 |
-
* @param $rest_url
|
44 |
-
* @param $query_params
|
45 |
-
* @param string $
|
46 |
*
|
47 |
* @return string
|
48 |
*/
|
49 |
-
public static function get_transient_name( $rest_url, $query_params, $
|
50 |
|
51 |
-
if (is_array($query_params)) {
|
52 |
-
$query_params = wp_json_encode($query_params);
|
53 |
}
|
54 |
|
55 |
$name = md5( $rest_url . $query_params );
|
56 |
|
57 |
-
return self::GA_TRANSIENT_PREFIX . $name . '_' . $
|
58 |
}
|
59 |
|
60 |
/**
|
61 |
* Gets cached data.
|
62 |
*
|
63 |
-
* @param $name
|
64 |
*
|
65 |
* @return bool|mixed
|
66 |
*/
|
67 |
public static function get_cached_result( $name ) {
|
|
|
68 |
|
69 |
-
|
70 |
-
|
71 |
-
// Check if cache exists
|
72 |
-
if ( ! empty( $data[ $name ] ) ) { // Cache exists
|
73 |
return $data[ $name ];
|
74 |
-
|
75 |
-
|
76 |
-
}
|
77 |
}
|
|
|
78 |
|
79 |
/**
|
80 |
-
* Sets
|
81 |
*
|
82 |
-
* @param $name
|
83 |
-
* @param $result
|
84 |
*/
|
85 |
public static function set_cache( $name, $result ) {
|
86 |
-
if (
|
87 |
self::set_last_cache_time( $name );
|
88 |
self::set_cache_buffer( $name, $result );
|
89 |
self::delete_last_time_attempt();
|
@@ -93,7 +102,7 @@ class Ga_Cache {
|
|
93 |
/**
|
94 |
* Updates the time the response was cached.
|
95 |
*
|
96 |
-
* @param $name
|
97 |
*/
|
98 |
public static function set_last_cache_time( $name ) {
|
99 |
$data = get_option( self::GA_LAST_CACHE_OPTION_NAME );
|
@@ -111,8 +120,8 @@ class Ga_Cache {
|
|
111 |
/**
|
112 |
* Sets or update data cache.
|
113 |
*
|
114 |
-
* @param $name
|
115 |
-
* @param $result
|
116 |
*/
|
117 |
public static function set_cache_buffer( $name, $result ) {
|
118 |
$data = get_option( self::GA_BUFFER_CACHE_OPTION_NAME );
|
@@ -131,7 +140,7 @@ class Ga_Cache {
|
|
131 |
* Sets last time attempt option
|
132 |
*/
|
133 |
public static function set_last_time_attempt() {
|
134 |
-
update_option( self::GA_LAST_TIME_ATTEMPT_OPTION_NAME, time());
|
135 |
}
|
136 |
|
137 |
/**
|
@@ -146,62 +155,65 @@ class Ga_Cache {
|
|
146 |
*
|
147 |
* Next api request is allowed when there was an unsuccessful attempt and data_cache is empty.
|
148 |
*
|
149 |
-
* @param $name
|
150 |
*
|
151 |
* @return bool
|
152 |
*/
|
153 |
public static function is_next_request_allowed( $name ) {
|
154 |
-
$last_time_attempt
|
155 |
-
$outdated_last_attempt_time = true;
|
156 |
|
157 |
-
if ( empty( $last_time_attempt ) ) {
|
158 |
-
// If there is no last_time_attempt then return true
|
159 |
return true;
|
160 |
-
}
|
161 |
-
|
162 |
-
|
163 |
|
164 |
-
return (
|
165 |
}
|
166 |
|
167 |
/**
|
168 |
* Checks whether data cache is outdated.
|
169 |
-
*
|
170 |
-
* @param string $
|
|
|
171 |
*
|
172 |
* @return bool
|
173 |
*/
|
174 |
-
public static function is_data_cache_outdated($name = '', $appendix = '') {
|
175 |
-
$last_time
|
176 |
-
$outdated
|
177 |
-
if (
|
178 |
-
|
179 |
-
// Validate cache for given rest name
|
180 |
-
if (
|
181 |
-
|
182 |
-
//
|
183 |
-
if (
|
184 |
-
return (
|
185 |
-
|
|
|
|
|
186 |
} else {
|
187 |
return ! empty( $last_time[ $name ] ) && ( $last_time[ $name ] + self::GA_DATA_EXPIRATION_TIME ) < time();
|
188 |
}
|
|
|
189 |
|
190 |
-
|
191 |
-
|
192 |
-
// If any of existing caches is outdated
|
193 |
foreach ( $last_time as $item => $time ) {
|
194 |
-
//
|
195 |
-
if (
|
196 |
-
if (
|
|
|
|
|
197 |
$outdated ++;
|
198 |
}
|
199 |
} else {
|
200 |
-
|
201 |
-
|
|
|
202 |
}
|
203 |
}
|
204 |
-
}
|
205 |
|
206 |
return $outdated > 0;
|
207 |
}
|
@@ -209,5 +221,4 @@ class Ga_Cache {
|
|
209 |
|
210 |
return false;
|
211 |
}
|
212 |
-
|
213 |
}
|
1 |
<?php
|
|
|
2 |
/**
|
3 |
+
* Request caching tool.
|
4 |
*
|
5 |
+
* @package GoogleAnalytics
|
6 |
+
*/
|
7 |
+
|
8 |
+
/**
|
9 |
+
* Cache class.
|
10 |
*/
|
11 |
class Ga_Cache {
|
12 |
|
25 |
|
26 |
const GA_WAIT_AFTER_ERROR_TIME = 300; // 60 * 5 = 5 min
|
27 |
|
28 |
+
/**
|
29 |
+
* Add cache options.
|
30 |
+
*
|
31 |
+
* @return void
|
32 |
+
*/
|
33 |
public static function add_cache_options() {
|
34 |
add_option( self::GA_LAST_CACHE_OPTION_NAME );
|
35 |
add_option( self::GA_BUFFER_CACHE_OPTION_NAME );
|
36 |
add_option( self::GA_LAST_TIME_ATTEMPT_OPTION_NAME );
|
37 |
}
|
38 |
|
39 |
+
/**
|
40 |
+
* Delete cache options.
|
41 |
+
*
|
42 |
+
* @return void
|
43 |
+
*/
|
44 |
public static function delete_cache_options() {
|
45 |
delete_option( self::GA_LAST_CACHE_OPTION_NAME );
|
46 |
delete_option( self::GA_BUFFER_CACHE_OPTION_NAME );
|
50 |
/**
|
51 |
* Generates transient name.
|
52 |
*
|
53 |
+
* @param string $rest_url Rest URL string.
|
54 |
+
* @param array $query_params Query params.
|
55 |
+
* @param string $appendix String to append.
|
56 |
*
|
57 |
* @return string
|
58 |
*/
|
59 |
+
public static function get_transient_name( $rest_url, $query_params, $appendix = '' ) {
|
60 |
|
61 |
+
if ( is_array( $query_params ) ) {
|
62 |
+
$query_params = wp_json_encode( $query_params );
|
63 |
}
|
64 |
|
65 |
$name = md5( $rest_url . $query_params );
|
66 |
|
67 |
+
return self::GA_TRANSIENT_PREFIX . $name . '_' . $appendix;
|
68 |
}
|
69 |
|
70 |
/**
|
71 |
* Gets cached data.
|
72 |
*
|
73 |
+
* @param string $name Cache key string.
|
74 |
*
|
75 |
* @return bool|mixed
|
76 |
*/
|
77 |
public static function get_cached_result( $name ) {
|
78 |
+
$data = get_option( self::GA_BUFFER_CACHE_OPTION_NAME );
|
79 |
|
80 |
+
// Check if cache exists.
|
81 |
+
if ( false === empty( $data[ $name ] ) ) {
|
|
|
|
|
82 |
return $data[ $name ];
|
83 |
+
} else {
|
84 |
+
return false;
|
|
|
85 |
}
|
86 |
+
}
|
87 |
|
88 |
/**
|
89 |
+
* Sets cache value.
|
90 |
*
|
91 |
+
* @param string $name Cache key name.
|
92 |
+
* @param mixed $result Cache key value.
|
93 |
*/
|
94 |
public static function set_cache( $name, $result ) {
|
95 |
+
if ( false === empty( $result ) ) {
|
96 |
self::set_last_cache_time( $name );
|
97 |
self::set_cache_buffer( $name, $result );
|
98 |
self::delete_last_time_attempt();
|
102 |
/**
|
103 |
* Updates the time the response was cached.
|
104 |
*
|
105 |
+
* @param string $name Cache key name.
|
106 |
*/
|
107 |
public static function set_last_cache_time( $name ) {
|
108 |
$data = get_option( self::GA_LAST_CACHE_OPTION_NAME );
|
120 |
/**
|
121 |
* Sets or update data cache.
|
122 |
*
|
123 |
+
* @param string $name Cache key name.
|
124 |
+
* @param string $result Cache key value.
|
125 |
*/
|
126 |
public static function set_cache_buffer( $name, $result ) {
|
127 |
$data = get_option( self::GA_BUFFER_CACHE_OPTION_NAME );
|
140 |
* Sets last time attempt option
|
141 |
*/
|
142 |
public static function set_last_time_attempt() {
|
143 |
+
update_option( self::GA_LAST_TIME_ATTEMPT_OPTION_NAME, time() );
|
144 |
}
|
145 |
|
146 |
/**
|
155 |
*
|
156 |
* Next api request is allowed when there was an unsuccessful attempt and data_cache is empty.
|
157 |
*
|
158 |
+
* @param string $name Name string.
|
159 |
*
|
160 |
* @return bool
|
161 |
*/
|
162 |
public static function is_next_request_allowed( $name ) {
|
163 |
+
$last_time_attempt = get_option( self::GA_LAST_TIME_ATTEMPT_OPTION_NAME );
|
|
|
164 |
|
165 |
+
if ( true === empty( $last_time_attempt ) ) {
|
166 |
+
// If there is no last_time_attempt then return true.
|
167 |
return true;
|
168 |
+
} else {
|
169 |
+
$outdated_last_attempt_time = ( $last_time_attempt + self::GA_WAIT_AFTER_ERROR_TIME ) < time();
|
170 |
+
}
|
171 |
|
172 |
+
return ( false === empty( self::get_cached_result( $name ) ) && true === $outdated_last_attempt_time );
|
173 |
}
|
174 |
|
175 |
/**
|
176 |
* Checks whether data cache is outdated.
|
177 |
+
*
|
178 |
+
* @param string $name Cache key name string.
|
179 |
+
* @param string $appendix Cache key string to append.
|
180 |
*
|
181 |
* @return bool
|
182 |
*/
|
183 |
+
public static function is_data_cache_outdated( $name = '', $appendix = '' ) {
|
184 |
+
$last_time = get_option( self::GA_LAST_CACHE_OPTION_NAME );
|
185 |
+
$outdated = 0;
|
186 |
+
if ( false === empty( $last_time ) ) {
|
187 |
+
|
188 |
+
// Validate cache for given rest name.
|
189 |
+
if ( false === empty( $name ) ) {
|
190 |
+
|
191 |
+
// If appendix is set then check only that cache which concerns given appendix.
|
192 |
+
if ( false === empty( $appendix ) ) {
|
193 |
+
return (
|
194 |
+
preg_match( '/' . $appendix . '/', $name )
|
195 |
+
&& ( $last_time[ $name ] + self::GA_DATA_EXPIRATION_TIME ) < time()
|
196 |
+
);
|
197 |
} else {
|
198 |
return ! empty( $last_time[ $name ] ) && ( $last_time[ $name ] + self::GA_DATA_EXPIRATION_TIME ) < time();
|
199 |
}
|
200 |
+
} else { // Validate cache for all requests.
|
201 |
|
202 |
+
// If any of existing caches is outdated.
|
|
|
|
|
203 |
foreach ( $last_time as $item => $time ) {
|
204 |
+
// If appendix is set then check only entries concerns given appendix.
|
205 |
+
if ( false === empty( $appendix ) ) {
|
206 |
+
if (
|
207 |
+
preg_match( '/' . $appendix . '/', $item )
|
208 |
+
&& ( $time + self::GA_DATA_EXPIRATION_TIME ) < time() ) {
|
209 |
$outdated ++;
|
210 |
}
|
211 |
} else {
|
212 |
+
if ( ( $time + self::GA_DATA_EXPIRATION_TIME ) < time() ) {
|
213 |
+
$outdated ++;
|
214 |
+
}
|
215 |
}
|
216 |
}
|
|
|
217 |
|
218 |
return $outdated > 0;
|
219 |
}
|
221 |
|
222 |
return false;
|
223 |
}
|
|
|
224 |
}
|
tools/{class-support-logging.php → class-ga-supportlogger.php}
RENAMED
@@ -1,24 +1,44 @@
|
|
1 |
<?php
|
2 |
-
|
3 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
4 |
class Ga_SupportLogger {
|
5 |
const LOG_OPTION = 'googleanalytics_sherethis_error_log';
|
6 |
|
7 |
-
|
8 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
9 |
|
10 |
/**
|
11 |
* Constructor.
|
|
|
12 |
* @return void
|
13 |
*/
|
14 |
public function __construct() {
|
15 |
add_action( 'st_support_show_button', array( $this, 'display_button' ) );
|
16 |
-
add_action( 'st_support_save_error',
|
17 |
$this->get_debug_body();
|
18 |
}
|
19 |
|
20 |
/**
|
21 |
* Displays a button to email the debugging info.
|
|
|
22 |
* @return void
|
23 |
*/
|
24 |
public function display_button() {
|
@@ -31,17 +51,22 @@ class Ga_SupportLogger {
|
|
31 |
|
32 |
/**
|
33 |
* Saves an error to the log.
|
|
|
34 |
* @param Exception $err Error to save.
|
35 |
* @return void
|
36 |
*/
|
37 |
public function save_error( Exception $err ) {
|
38 |
$cur_log = get_option( self::LOG_OPTION, array() );
|
39 |
|
|
|
|
|
|
|
|
|
40 |
// Creates the error object.
|
41 |
$new_log = array(
|
42 |
'message' => $err->getMessage(),
|
43 |
-
'stack'
|
44 |
-
'date'
|
45 |
);
|
46 |
|
47 |
if ( method_exists( $err, 'get_google_error_response' ) ) {
|
@@ -59,6 +84,22 @@ class Ga_SupportLogger {
|
|
59 |
update_option( self::LOG_OPTION, $cur_log );
|
60 |
}
|
61 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
62 |
public function get_debug_body() {
|
63 |
$debug_error = $this->get_formatted_log();
|
64 |
|
@@ -70,20 +111,25 @@ class Ga_SupportLogger {
|
|
70 |
|
71 |
$debug_message = $this->get_formatted_message();
|
72 |
|
73 |
-
$debug_link = (
|
74 |
|
75 |
$let_debug_message = '<br> If you are still experiencing the issue after that click <a href="' . $debug_link . '&sdb=true" id="debug-message">here</a>';
|
76 |
|
77 |
-
$
|
78 |
|
79 |
-
|
80 |
-
|
|
|
|
|
81 |
$body .= $debug_help_message['let-debug'] ? $let_debug_message : '';
|
82 |
|
83 |
-
self::$debug_info = array(
|
|
|
|
|
|
|
84 |
} else {
|
85 |
-
$body
|
86 |
-
$body .= implode( $this->get_debug_info()
|
87 |
$body .= PHP_EOL . PHP_EOL . 'Error Log:' . PHP_EOL . PHP_EOL;
|
88 |
$body .= esc_html( $debug_error );
|
89 |
|
@@ -91,113 +137,122 @@ class Ga_SupportLogger {
|
|
91 |
}
|
92 |
}
|
93 |
|
94 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
95 |
|
96 |
-
switch ($error) {
|
97 |
case 'invalid_grant':
|
98 |
return array(
|
99 |
'message' => 'Hi! It looks like you submitted the wrong authentication grant. Please try again by re-authenticating.',
|
100 |
-
'let-debug' => true
|
101 |
);
|
102 |
-
break;
|
103 |
case 'SSL certificate problem: unable to get local issuer certificate (60)':
|
104 |
return array(
|
105 |
'message' => 'Hi! Please check your site\'s SSL certificate. A functioning SSL certificate is required',
|
106 |
-
'let-debug' => false
|
107 |
);
|
108 |
-
break;
|
109 |
case 'SSL certificate problem: unable to get local issuer certificate':
|
110 |
return array(
|
111 |
'message' => 'Hi! Please check your site\'s SSL certificate. A functioning SSL certificate is required',
|
112 |
-
'let-debug' => false
|
113 |
);
|
114 |
-
break;
|
115 |
case 'User does not have any Google Analytics account.':
|
116 |
return array(
|
117 |
'message' => 'Hi! Looks like we’re not able to find a Google Analytics account. Please double check to make sure the Google account you used to authenticate with has a working Google Analytics account setup.',
|
118 |
-
'let-debug' => false
|
119 |
);
|
120 |
-
break;
|
121 |
case 'SSL certificate problem: certificate has expired (60)':
|
122 |
return array(
|
123 |
'message' => 'Hi! Please check your site\'s SSL certificate. A functioning SSL certificate is required',
|
124 |
-
'let-debug' => false
|
125 |
);
|
126 |
-
break;
|
127 |
case 'SSL certificate problem, verify that the CA cert is OK':
|
128 |
return array(
|
129 |
'message' => 'Hi! Please check your site\'s SSL certificate. A functioning SSL certificate is required',
|
130 |
-
'let-debug' => false
|
131 |
);
|
132 |
-
break;
|
133 |
}
|
134 |
|
135 |
return array(
|
136 |
-
'message'
|
137 |
-
'let-debug' => true
|
138 |
);
|
139 |
}
|
140 |
|
141 |
/**
|
142 |
* Gets an array of debugging information about the current system.
|
|
|
143 |
* @return array
|
144 |
*/
|
145 |
private function get_debug_info() {
|
146 |
$theme = wp_get_theme();
|
147 |
$plugins = wp_get_active_and_valid_plugins();
|
148 |
|
149 |
-
$
|
150 |
-
|
151 |
-
|
152 |
-
|
153 |
-
'
|
154 |
-
'
|
155 |
-
'
|
156 |
-
'
|
157 |
-
'
|
158 |
-
'
|
159 |
-
'
|
160 |
-
'
|
161 |
-
'
|
162 |
-
'
|
163 |
-
'
|
|
|
|
|
|
|
164 |
'Manually Tracking ID enabled' => get_option( 'googleanalytics_web_property_id_manually' ),
|
165 |
-
'Manually typed Tracking ID'
|
166 |
-
'Tracking ID'
|
167 |
);
|
168 |
$formatted = array();
|
169 |
foreach ( $data as $text => $value ) {
|
170 |
-
|
171 |
-
|
172 |
-
$value
|
173 |
);
|
174 |
}
|
|
|
175 |
return $formatted;
|
176 |
}
|
177 |
|
178 |
/**
|
179 |
* Gets CURL version
|
|
|
180 |
* @return string
|
181 |
*/
|
182 |
-
private function get_curl_version(){
|
183 |
$curl_version = curl_version();
|
184 |
-
return !empty( $curl_version['version'] ) ? $curl_version['version'] : '';
|
185 |
}
|
186 |
|
187 |
/**
|
188 |
* Gets operating system
|
|
|
189 |
* @return string
|
190 |
*/
|
191 |
-
private function get_operating_system(){
|
192 |
if ( function_exists( 'ini_get' ) ) {
|
193 |
$disabled = explode( ',', ini_get( 'disable_functions' ) );
|
194 |
-
return
|
195 |
}
|
196 |
return PHP_OS;
|
197 |
}
|
198 |
|
199 |
/**
|
200 |
* Gets a string of formatted error log entries.
|
|
|
201 |
* @return string
|
202 |
*/
|
203 |
private function get_formatted_log() {
|
@@ -218,6 +273,7 @@ class Ga_SupportLogger {
|
|
218 |
|
219 |
/**
|
220 |
* Gets a string of formatted of just the message
|
|
|
221 |
* @return string
|
222 |
*/
|
223 |
private function get_formatted_message() {
|
@@ -226,7 +282,7 @@ class Ga_SupportLogger {
|
|
226 |
return 'None';
|
227 |
}
|
228 |
|
229 |
-
return isset($log[0]['message']) ? $log[0]['message'] : '';
|
230 |
}
|
231 |
|
232 |
}
|
1 |
<?php
|
2 |
+
/**
|
3 |
+
* Support Logger class.
|
4 |
+
*
|
5 |
+
* @package GoogleAnalytics
|
6 |
+
*/
|
7 |
+
|
8 |
+
/**
|
9 |
+
* GA Support Logger class.
|
10 |
+
*/
|
11 |
class Ga_SupportLogger {
|
12 |
const LOG_OPTION = 'googleanalytics_sherethis_error_log';
|
13 |
|
14 |
+
/**
|
15 |
+
* Debug info.
|
16 |
+
*
|
17 |
+
* @var mixed Info.
|
18 |
+
*/
|
19 |
+
public static $debug_info;
|
20 |
+
|
21 |
+
/**
|
22 |
+
* Debug help message.
|
23 |
+
*
|
24 |
+
* @var string Message.
|
25 |
+
*/
|
26 |
+
public static $debug_help_message;
|
27 |
|
28 |
/**
|
29 |
* Constructor.
|
30 |
+
*
|
31 |
* @return void
|
32 |
*/
|
33 |
public function __construct() {
|
34 |
add_action( 'st_support_show_button', array( $this, 'display_button' ) );
|
35 |
+
add_action( 'st_support_save_error', array( $this, 'save_error' ) );
|
36 |
$this->get_debug_body();
|
37 |
}
|
38 |
|
39 |
/**
|
40 |
* Displays a button to email the debugging info.
|
41 |
+
*
|
42 |
* @return void
|
43 |
*/
|
44 |
public function display_button() {
|
51 |
|
52 |
/**
|
53 |
* Saves an error to the log.
|
54 |
+
*
|
55 |
* @param Exception $err Error to save.
|
56 |
* @return void
|
57 |
*/
|
58 |
public function save_error( Exception $err ) {
|
59 |
$cur_log = get_option( self::LOG_OPTION, array() );
|
60 |
|
61 |
+
if ( false === is_array( $cur_log ) ) {
|
62 |
+
$cur_log = array();
|
63 |
+
}
|
64 |
+
|
65 |
// Creates the error object.
|
66 |
$new_log = array(
|
67 |
'message' => $err->getMessage(),
|
68 |
+
'stack' => $err->getTraceAsString(),
|
69 |
+
'date' => current_time( 'r' ),
|
70 |
);
|
71 |
|
72 |
if ( method_exists( $err, 'get_google_error_response' ) ) {
|
84 |
update_option( self::LOG_OPTION, $cur_log );
|
85 |
}
|
86 |
|
87 |
+
/**
|
88 |
+
* Get Current URL.
|
89 |
+
*
|
90 |
+
* @return string|void
|
91 |
+
*/
|
92 |
+
public static function get_current_url() {
|
93 |
+
$request_uri = filter_input( INPUT_SERVER, 'REQUEST_URI', FILTER_SANITIZE_STRING );
|
94 |
+
|
95 |
+
return wp_unslash( $request_uri );
|
96 |
+
}
|
97 |
+
|
98 |
+
/**
|
99 |
+
* Get debug body.
|
100 |
+
*
|
101 |
+
* @return void
|
102 |
+
*/
|
103 |
public function get_debug_body() {
|
104 |
$debug_error = $this->get_formatted_log();
|
105 |
|
111 |
|
112 |
$debug_message = $this->get_formatted_message();
|
113 |
|
114 |
+
$debug_link = self::get_current_url();
|
115 |
|
116 |
$let_debug_message = '<br> If you are still experiencing the issue after that click <a href="' . $debug_link . '&sdb=true" id="debug-message">here</a>';
|
117 |
|
118 |
+
$sdb = filter_input( INPUT_GET, 'sdb', FILTER_SANITIZE_STRING );
|
119 |
|
120 |
+
$debug_help_message = false === empty( $sdb ) ? false : $this->get_debug_help_message( $debug_message );
|
121 |
+
|
122 |
+
if ( isset( $debug_help_message['message'] ) ) {
|
123 |
+
$body = $debug_help_message['message'];
|
124 |
$body .= $debug_help_message['let-debug'] ? $let_debug_message : '';
|
125 |
|
126 |
+
self::$debug_info = array(
|
127 |
+
'message' => $body,
|
128 |
+
'debug' => $debug_help_message['let-debug'],
|
129 |
+
);
|
130 |
} else {
|
131 |
+
$body = 'Debug Info:' . PHP_EOL . PHP_EOL;
|
132 |
+
$body .= implode( PHP_EOL, $this->get_debug_info() );
|
133 |
$body .= PHP_EOL . PHP_EOL . 'Error Log:' . PHP_EOL . PHP_EOL;
|
134 |
$body .= esc_html( $debug_error );
|
135 |
|
137 |
}
|
138 |
}
|
139 |
|
140 |
+
/**
|
141 |
+
* Get debug help message.
|
142 |
+
*
|
143 |
+
* @param string $error Error string.
|
144 |
+
*
|
145 |
+
* @return array Array with message and let-debug boolean.
|
146 |
+
*/
|
147 |
+
public function get_debug_help_message( $error ) {
|
148 |
|
149 |
+
switch ( $error ) {
|
150 |
case 'invalid_grant':
|
151 |
return array(
|
152 |
'message' => 'Hi! It looks like you submitted the wrong authentication grant. Please try again by re-authenticating.',
|
153 |
+
'let-debug' => true,
|
154 |
);
|
|
|
155 |
case 'SSL certificate problem: unable to get local issuer certificate (60)':
|
156 |
return array(
|
157 |
'message' => 'Hi! Please check your site\'s SSL certificate. A functioning SSL certificate is required',
|
158 |
+
'let-debug' => false,
|
159 |
);
|
|
|
160 |
case 'SSL certificate problem: unable to get local issuer certificate':
|
161 |
return array(
|
162 |
'message' => 'Hi! Please check your site\'s SSL certificate. A functioning SSL certificate is required',
|
163 |
+
'let-debug' => false,
|
164 |
);
|
|
|
165 |
case 'User does not have any Google Analytics account.':
|
166 |
return array(
|
167 |
'message' => 'Hi! Looks like we’re not able to find a Google Analytics account. Please double check to make sure the Google account you used to authenticate with has a working Google Analytics account setup.',
|
168 |
+
'let-debug' => false,
|
169 |
);
|
|
|
170 |
case 'SSL certificate problem: certificate has expired (60)':
|
171 |
return array(
|
172 |
'message' => 'Hi! Please check your site\'s SSL certificate. A functioning SSL certificate is required',
|
173 |
+
'let-debug' => false,
|
174 |
);
|
|
|
175 |
case 'SSL certificate problem, verify that the CA cert is OK':
|
176 |
return array(
|
177 |
'message' => 'Hi! Please check your site\'s SSL certificate. A functioning SSL certificate is required',
|
178 |
+
'let-debug' => false,
|
179 |
);
|
|
|
180 |
}
|
181 |
|
182 |
return array(
|
183 |
+
'message' => 'Hi! It appears something went wrong. We apologize for the inconvenience! Please try to re-authenticate your Google account and verify your site has a proper SSL certficiate.',
|
184 |
+
'let-debug' => true,
|
185 |
);
|
186 |
}
|
187 |
|
188 |
/**
|
189 |
* Gets an array of debugging information about the current system.
|
190 |
+
*
|
191 |
* @return array
|
192 |
*/
|
193 |
private function get_debug_info() {
|
194 |
$theme = wp_get_theme();
|
195 |
$plugins = wp_get_active_and_valid_plugins();
|
196 |
|
197 |
+
$server_software = filter_input( INPUT_SERVER, 'SERVER_SOFTWARE', FILTER_SANITIZE_STRING );
|
198 |
+
$http_user_agent = filter_input( INPUT_SERVER, 'HTTP_USER_AGENT', FILTER_SANITIZE_STRING );
|
199 |
+
|
200 |
+
$data = array(
|
201 |
+
'Plugin Version' => GOOGLEANALYTICS_VERSION,
|
202 |
+
'WordPress Version' => get_bloginfo( 'version' ),
|
203 |
+
'PHP Version' => phpversion(),
|
204 |
+
'CURL Version' => $this->get_curl_version(),
|
205 |
+
'Site URL' => get_bloginfo( 'wpurl' ),
|
206 |
+
'Theme Name' => $theme->get( 'Name' ),
|
207 |
+
'Theme URL' => $theme->get( 'ThemeURI' ),
|
208 |
+
'Theme Version' => $theme->get( 'Version' ),
|
209 |
+
'Active Plugins' => implode( ', ', $plugins ),
|
210 |
+
'Operating System' => $this->get_operating_system(),
|
211 |
+
'Web Server' => $server_software,
|
212 |
+
'Current Time' => current_time( 'r' ),
|
213 |
+
'Browser' => false === empty( $http_user_agent ) ? $http_user_agent : '',
|
214 |
+
'Excluded roles' => get_option( 'googleanalytics_exclude_roles' ),
|
215 |
'Manually Tracking ID enabled' => get_option( 'googleanalytics_web_property_id_manually' ),
|
216 |
+
'Manually typed Tracking ID' => get_option( 'googleanalytics_web_property_id_manually_value' ),
|
217 |
+
'Tracking ID' => get_option( 'googleanalytics_web_property_id' ),
|
218 |
);
|
219 |
$formatted = array();
|
220 |
foreach ( $data as $text => $value ) {
|
221 |
+
/* translators: %s refers to the value of the message. */
|
222 |
+
$formatted[] = esc_html__(
|
223 |
+
$text . sprintf( ': %s', $value ) // phpcs:ignore
|
224 |
);
|
225 |
}
|
226 |
+
|
227 |
return $formatted;
|
228 |
}
|
229 |
|
230 |
/**
|
231 |
* Gets CURL version
|
232 |
+
*
|
233 |
* @return string
|
234 |
*/
|
235 |
+
private function get_curl_version() {
|
236 |
$curl_version = curl_version();
|
237 |
+
return ! empty( $curl_version['version'] ) ? $curl_version['version'] : '';
|
238 |
}
|
239 |
|
240 |
/**
|
241 |
* Gets operating system
|
242 |
+
*
|
243 |
* @return string
|
244 |
*/
|
245 |
+
private function get_operating_system() {
|
246 |
if ( function_exists( 'ini_get' ) ) {
|
247 |
$disabled = explode( ',', ini_get( 'disable_functions' ) );
|
248 |
+
return false === in_array( 'php_uname', $disabled, true ) ? php_uname() : PHP_OS;
|
249 |
}
|
250 |
return PHP_OS;
|
251 |
}
|
252 |
|
253 |
/**
|
254 |
* Gets a string of formatted error log entries.
|
255 |
+
*
|
256 |
* @return string
|
257 |
*/
|
258 |
private function get_formatted_log() {
|
273 |
|
274 |
/**
|
275 |
* Gets a string of formatted of just the message
|
276 |
+
*
|
277 |
* @return string
|
278 |
*/
|
279 |
private function get_formatted_message() {
|
282 |
return 'None';
|
283 |
}
|
284 |
|
285 |
+
return isset( $log[0]['message'] ) ? $log[0]['message'] : '';
|
286 |
}
|
287 |
|
288 |
}
|
view/ga-accounts-selector.php
ADDED
@@ -0,0 +1,47 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Accounts Selector view.
|
4 |
+
*
|
5 |
+
* @package GoogleAnalytics
|
6 |
+
*/
|
7 |
+
|
8 |
+
// Set add_manually_enabled fallback.
|
9 |
+
$add_manually_enabled = isset( $add_manually_enabled ) ? $add_manually_enabled : false;
|
10 |
+
|
11 |
+
// Set selected value fallback.
|
12 |
+
$selected = isset( $selected ) ? $selected : '';
|
13 |
+
?>
|
14 |
+
<div class="wrap">
|
15 |
+
<input type="hidden" name="<?php echo esc_attr( Ga_Admin::GA_SELECTED_ACCOUNT ); ?>"
|
16 |
+
value="<?php echo esc_attr( $selected ); ?>">
|
17 |
+
<select id="ga_account_selector"
|
18 |
+
name="<?php echo esc_attr( Ga_Admin::GA_SELECTED_ACCOUNT ); ?>"
|
19 |
+
<?php echo disabled( true === $add_manually_enabled ); ?>
|
20 |
+
>
|
21 |
+
<option><?php echo esc_html__( 'Please select your Google Analytics account:', 'googleanalytics' ); ?></option>
|
22 |
+
<?php
|
23 |
+
if ( false === empty( $selector ) ) :
|
24 |
+
foreach ( $selector as $account ) :
|
25 |
+
?>
|
26 |
+
<optgroup label="<?php echo esc_attr( $account['name'] ); ?>">
|
27 |
+
<?php foreach ( $account['webProperties'] as $property ) : ?>
|
28 |
+
<?php
|
29 |
+
foreach ( $property['profiles'] as $profile ) :
|
30 |
+
$profile_value = $account['id'] . '_' . $property['webPropertyId'] . '_' . $profile['id'];
|
31 |
+
$profile_label = $property['name'] . ' [' . $property['webPropertyId'] . '][' . $profile['id'] . ']';
|
32 |
+
?>
|
33 |
+
<option value="<?php echo esc_attr( $profile_value ); ?>"
|
34 |
+
<?php echo selected( $selected, $profile_value ); ?>
|
35 |
+
>
|
36 |
+
<?php echo esc_html( $profile_label ); ?>
|
37 |
+
</option>
|
38 |
+
<?php endforeach; ?>
|
39 |
+
<?php endforeach; ?>
|
40 |
+
</optgroup>
|
41 |
+
<?php
|
42 |
+
endforeach;
|
43 |
+
endif;
|
44 |
+
?>
|
45 |
+
</select>
|
46 |
+
</div>
|
47 |
+
|
view/ga-auth-button.php
ADDED
@@ -0,0 +1,35 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* GA Auth Button view.
|
4 |
+
*
|
5 |
+
* @package GoogleAnalytics
|
6 |
+
*/
|
7 |
+
|
8 |
+
// Template partial fallback values.
|
9 |
+
$label = isset( $label ) ? $label : '';
|
10 |
+
$manually_id = isset( $manually_id ) ? $manually_id : '';
|
11 |
+
$button_type = isset( $button_type ) ? $button_type : '';
|
12 |
+
$url = isset( $url ) ? $url : '';
|
13 |
+
$classes = array();
|
14 |
+
|
15 |
+
// Determine button classes.
|
16 |
+
if ( 'auth' === $button_type ) {
|
17 |
+
$classes[] = 'button-primary';
|
18 |
+
} else {
|
19 |
+
$classes[] = 'button-secondary';
|
20 |
+
}
|
21 |
+
?>
|
22 |
+
<button id="ga_authorize_with_google_button"
|
23 |
+
class="<?php echo esc_attr( implode( ' ', $classes ) ); ?>"
|
24 |
+
<?php if ( true === Ga_Helper::are_features_enabled() ) : ?>
|
25 |
+
onclick="ga_popup.authorize( event, '<?php echo esc_attr( $url ); ?>' )"
|
26 |
+
<?php endif; ?>
|
27 |
+
<?php
|
28 |
+
echo disabled(
|
29 |
+
false === empty( $manually_id )
|
30 |
+
|| false === Ga_Helper::are_features_enabled()
|
31 |
+
|| true === Ga_Helper::is_curl_disabled()
|
32 |
+
);
|
33 |
+
?>
|
34 |
+
><?php echo esc_html( $label ); ?>
|
35 |
+
</button>
|
view/{ga_code.php → ga-code.php}
RENAMED
@@ -1,3 +1,16 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
<script>
|
2 |
(function() {
|
3 |
(function (i, s, o, g, r, a, m) {
|
@@ -10,7 +23,7 @@
|
|
10 |
a.async = 1;
|
11 |
a.src = g;
|
12 |
m.parentNode.insertBefore(a, m)
|
13 |
-
})(window, document, 'script', '
|
14 |
|
15 |
ga('create', '<?php echo esc_attr( $data[ Ga_Admin::GA_WEB_PROPERTY_ID_OPTION_NAME ] ); ?>', 'auto');
|
16 |
<?php if ( 'on' === $data['anonymization'] ) : ?>
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Code view.
|
4 |
+
*
|
5 |
+
* @package GoogleAnalytics
|
6 |
+
*/
|
7 |
+
|
8 |
+
$debug_mode_on = isset( $debug_mode_on ) ? $debug_mode_on : false;
|
9 |
+
|
10 |
+
$script = ( true === $debug_mode_on ) ?
|
11 |
+
'https://google-analytics.com/analytics_debug.js' :
|
12 |
+
'https://google-analytics.com/analytics.js';
|
13 |
+
?>
|
14 |
<script>
|
15 |
(function() {
|
16 |
(function (i, s, o, g, r, a, m) {
|
23 |
a.async = 1;
|
24 |
a.src = g;
|
25 |
m.parentNode.insertBefore(a, m)
|
26 |
+
})(window, document, 'script', '<?php echo esc_url( $script ); ?>', 'ga');
|
27 |
|
28 |
ga('create', '<?php echo esc_attr( $data[ Ga_Admin::GA_WEB_PROPERTY_ID_OPTION_NAME ] ); ?>', 'auto');
|
29 |
<?php if ( 'on' === $data['anonymization'] ) : ?>
|
view/ga-dashboard-widget.php
ADDED
@@ -0,0 +1,110 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Dashboard Widget view.
|
4 |
+
*
|
5 |
+
* @package GoogleAnalytics
|
6 |
+
*/
|
7 |
+
|
8 |
+
$ga_nonce = isset( $ga_nonce ) ? $ga_nonce : '';
|
9 |
+
$more_details_url = isset( $more_details_url ) ? $more_details_url : '#';
|
10 |
+
$show_trigger_button = isset( $show_trigger_button ) ? $show_trigger_button : false;
|
11 |
+
?>
|
12 |
+
<div class="wrap ga-wrap">
|
13 |
+
<div class="form-group">
|
14 |
+
<select id="range-selector" autocomplete="off">
|
15 |
+
<option value="7daysAgo"><?php esc_html_e( 'Last 7 Days', 'googleanalytics' ); ?></option>
|
16 |
+
<option value="30daysAgo" selected="selected">
|
17 |
+
<?php esc_html_e( 'Last 30 Days', 'googleanalytics' ); ?></option>
|
18 |
+
<option value="90daysAgo"><?php esc_html_e( 'Last 90 Days', 'googleanalytics' ); ?></option>
|
19 |
+
</select>
|
20 |
+
|
21 |
+
<select id="metrics-selector" autocomplete="off">
|
22 |
+
<option value="pageviews"><?php esc_html_e( 'Pageviews', 'googleanalytics' ); ?></option>
|
23 |
+
<option value="sessions"><?php esc_html_e( 'Visits', 'googleanalytics' ); ?></option>
|
24 |
+
<option value="users"><?php esc_html_e( 'Users', 'googleanalytics' ); ?></option>
|
25 |
+
<option value="organicSearches"><?php esc_html_e( 'Organic Search', 'googleanalytics' ); ?></option>
|
26 |
+
<option value="visitBounceRate"><?php esc_html_e( 'Bounce Rate', 'googleanalytics' ); ?></option>
|
27 |
+
</select>
|
28 |
+
|
29 |
+
<div class="ga-loader-wrapper">
|
30 |
+
<div class="ga-loader"></div>
|
31 |
+
</div>
|
32 |
+
</div>
|
33 |
+
|
34 |
+
<div>
|
35 |
+
<div id="chart_div" style="width: 100%;">
|
36 |
+
<?php if ( true === $show_trigger_button ) : ?>
|
37 |
+
<div style="text-align: center">
|
38 |
+
<div style="margin: 20px auto;">
|
39 |
+
<button id="ga-widget-trigger" style="border: 1px solid #cccccc;width: 60%; padding: 10px"
|
40 |
+
class="button-link">
|
41 |
+
<?php esc_html_e( 'Click here to get data', 'googleanalytics' ); ?>
|
42 |
+
</button>
|
43 |
+
</div>
|
44 |
+
</div>
|
45 |
+
<?php endif; ?>
|
46 |
+
</div>
|
47 |
+
<div id="ga_widget_error" class="notice notice-warning hidden"></div>
|
48 |
+
<div>
|
49 |
+
<div id="boxes-container">
|
50 |
+
<div class="ga-box-row">
|
51 |
+
<?php if ( false === empty( $boxes ) ) : ?>
|
52 |
+
<?php $iter = 1; ?>
|
53 |
+
<?php foreach ( $boxes as $k => $v ) : ?>
|
54 |
+
<div class="ga-box-column ga-box-dashboard">
|
55 |
+
<div style="color: grey; font-size: 13px;" id="ga_box_dashboard_label_<?php echo esc_attr( $k ); ?>">
|
56 |
+
<?php echo esc_html( $v['label'] ); ?></div>
|
57 |
+
<div style="font-size: 15px;" id="ga_box_dashboard_value_<?php echo esc_attr( $k ); ?>">
|
58 |
+
<?php echo esc_html( $v['value'] ); ?></div>
|
59 |
+
</div>
|
60 |
+
<?php if ( ( ( $iter ++ ) % 3 ) === 0 ) : ?>
|
61 |
+
</div>
|
62 |
+
<div class="ga-box-row">
|
63 |
+
<?php endif; ?>
|
64 |
+
<?php endforeach; ?>
|
65 |
+
<?php endif; ?>
|
66 |
+
</div>
|
67 |
+
</div>
|
68 |
+
</div>
|
69 |
+
</div>
|
70 |
+
|
71 |
+
<div style="margin-top: 5px;">
|
72 |
+
<?php
|
73 |
+
echo wp_kses_post(
|
74 |
+
sprintf(
|
75 |
+
'<a href="%s">' . __( 'Show more details' ) . '</a>',
|
76 |
+
esc_url( $more_details_url )
|
77 |
+
)
|
78 |
+
);
|
79 |
+
?>
|
80 |
+
</div>
|
81 |
+
</div>
|
82 |
+
|
83 |
+
<script type="text/javascript">
|
84 |
+
const GA_NONCE = '<?php echo esc_js( $ga_nonce ); ?>';
|
85 |
+
const GA_NONCE_FIELD = '<?php echo esc_js( Ga_Admin_Controller::GA_NONCE_FIELD_NAME ); ?>';
|
86 |
+
<?php if ( false === $show_trigger_button ) : ?>
|
87 |
+
<?php if ( false === empty( $chart ) ) : ?>
|
88 |
+
dataArr = [ [ 'Day', 'Pageviews' ],
|
89 |
+
<?php
|
90 |
+
$arr = '';
|
91 |
+
foreach ( $chart as $row ) {
|
92 |
+
if ( $arr ) {
|
93 |
+
$arr .= ',';
|
94 |
+
}
|
95 |
+
$arr .= "['" . $row['day'] . "'," . $row['current'] . ']';
|
96 |
+
}
|
97 |
+
|
98 |
+
echo esc_js( $arr );
|
99 |
+
?>
|
100 |
+
];
|
101 |
+
|
102 |
+
ga_dashboard.init( dataArr, true );
|
103 |
+
ga_dashboard.events( dataArr );
|
104 |
+
<?php endif; ?>
|
105 |
+
<?php else : ?>
|
106 |
+
dataArr = [ [ 'Day', 'Pageviews' ], [] ];
|
107 |
+
ga_dashboard.init( false, false );
|
108 |
+
ga_dashboard.events();
|
109 |
+
<?php endif; ?>
|
110 |
+
</script>
|
view/ga-debug-modal.php
ADDED
@@ -0,0 +1,50 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Debug Modal view.
|
4 |
+
*
|
5 |
+
* @package GoogleAnalytics
|
6 |
+
*/
|
7 |
+
|
8 |
+
$sdb = filter_input( INPUT_GET, 'sdb', FILTER_SANITIZE_STRING );
|
9 |
+
|
10 |
+
$debug_info = isset( $debug_info ) ? $debug_info : array();
|
11 |
+
$show_modal = false === empty( $sdb ) ? 'style=display:block;' : '';
|
12 |
+
?>
|
13 |
+
|
14 |
+
<div id="ga_debug_modal" class="ga-modal" tabindex="-1" <?php echo esc_attr( $show_modal ); ?>>
|
15 |
+
<div class="ga-modal-dialog">
|
16 |
+
<div id="ga_debug_modal_content" class="ga-modal-content">
|
17 |
+
<div class="ga-modal-header">
|
18 |
+
<h4 class="ga-modal-title"><?php echo esc_html( 'Debug helper:' ); ?></h4>
|
19 |
+
<span id="ga_close" class="ga-close">×</span>
|
20 |
+
</div>
|
21 |
+
<div class="ga-modal-body">
|
22 |
+
<div class="ga-loader-wrapper">
|
23 |
+
<div class="ga-loader"></div>
|
24 |
+
</div>
|
25 |
+
<div class="ga-debug-form-div">
|
26 |
+
<?php if ( is_array( $debug_info ) ) : ?>
|
27 |
+
<?php echo wp_kses_post( $debug_info['message'] ); ?>
|
28 |
+
<?php else : ?>
|
29 |
+
<h4 class="ga-modal-title"><?php echo esc_html( 'Copy and paste this debug info into an email and send to support@sharethis.com' ); ?></h4>
|
30 |
+
<label for="ga_debug_info"
|
31 |
+
class="ga-debug-form-label"><strong><?php echo esc_html( 'Debug info' ); ?></strong>:</label>
|
32 |
+
<textarea id="ga_debug_info" class="ga-debug-form-field" rows="8"
|
33 |
+
cols="50"><?php echo esc_html( $debug_info ); ?></textarea>
|
34 |
+
<div class="ga-modal-footer">
|
35 |
+
<button type="button" id="copy-debug" class="button">
|
36 |
+
<?php
|
37 |
+
esc_html_e(
|
38 |
+
'Copy',
|
39 |
+
'google-analytics'
|
40 |
+
);
|
41 |
+
?>
|
42 |
+
</button>
|
43 |
+
<button id="ga_btn_close" type="button" class="button">Close</button>
|
44 |
+
</div>
|
45 |
+
<?php endif; ?>
|
46 |
+
</div>
|
47 |
+
</div>
|
48 |
+
</div><!-- /.modal-content -->
|
49 |
+
</div><!-- /.modal-dialog -->
|
50 |
+
</div><!-- /.modal -->
|
view/ga-googleanalytics-loader.php
ADDED
@@ -0,0 +1,20 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* GoogleAnalytics Loader view.
|
4 |
+
*
|
5 |
+
* @package GoogleAnalytics
|
6 |
+
*/
|
7 |
+
|
8 |
+
?>
|
9 |
+
<script>
|
10 |
+
jQuery(document).ready(function () {
|
11 |
+
jQuery.post(
|
12 |
+
'<?php echo esc_url( $ajaxurl ); ?>',
|
13 |
+
{action: 'googleanalytics_get_script'}, function(response) {
|
14 |
+
var s = document.createElement("script");
|
15 |
+
s.type = "text/javascript";
|
16 |
+
s.innerHTML = response;
|
17 |
+
jQuery("head").append(s);
|
18 |
+
});
|
19 |
+
});
|
20 |
+
</script>
|
view/ga-notice.php
ADDED
@@ -0,0 +1,22 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Notice view.
|
4 |
+
*
|
5 |
+
* @package GoogleAnalytics
|
6 |
+
*/
|
7 |
+
|
8 |
+
$url = isset( $url ) ? $url : '';
|
9 |
+
?>
|
10 |
+
<div id="googleanalytics_terms_notice"
|
11 |
+
class="notice notice-warning <?php echo esc_attr( Ga_Helper::is_plugin_page() ? '' : 'is-dismissible' ); ?>">
|
12 |
+
<p>
|
13 |
+
Google Analytics <?php echo esc_html( GOOGLEANALYTICS_VERSION ); ?> plugin <a
|
14 |
+
href="http://www.sharethis.com/news/2016/12/sharethis-adds-analytics-plugin-to-suite-of-tools/"
|
15 |
+
target="_blank">has joined the ShareThis family.</a> <strong>A host of new features</strong> have been
|
16 |
+
added in this version, including Google Analytics dashboards, demographics and device data.
|
17 |
+
The update requires agreeing to the <a href="http://www.sharethis.com/privacy/" target="_blank">privacy
|
18 |
+
policy</a> and <a
|
19 |
+
href="http://www.sharethis.com/publisher-terms-of-use/" target="_blank">terms of use</a> to enable them.
|
20 |
+
<a href="<?php echo esc_url( $url ); ?>"><span class="button button-primary">I accept</span></a>
|
21 |
+
</p>
|
22 |
+
</div>
|
view/ga-oauth-notice.php
ADDED
@@ -0,0 +1,12 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* OAuth Notice view.
|
4 |
+
*
|
5 |
+
* @package GoogleAnalytics
|
6 |
+
*/
|
7 |
+
|
8 |
+
$msg = isset( $msg ) ? $msg : '';
|
9 |
+
?>
|
10 |
+
<div class="ga-alert ga-alert-warning">
|
11 |
+
<?php echo wp_kses_post( $msg ); ?>
|
12 |
+
</div>
|
view/ga-wp-notice.php
ADDED
@@ -0,0 +1,21 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* WP Notice view.
|
4 |
+
*
|
5 |
+
* @package GoogleAnalytics
|
6 |
+
*/
|
7 |
+
|
8 |
+
$is_dismissable = isset( $is_dismissable ) ? $is_dismissable : false;
|
9 |
+
|
10 |
+
$msg = isset( $msg ) ? $msg : '';
|
11 |
+
|
12 |
+
$notice_type = isset( $notice_type ) ? $notice_type : '';
|
13 |
+
?>
|
14 |
+
<div class="notice notice-<?php echo esc_attr( $notice_type ); ?> <?php echo false === empty( $is_dismissable ) ? 'is-dismissible' : ''; ?>">
|
15 |
+
<p><?php echo esc_html( $msg ); ?>
|
16 |
+
<?php if ( ! empty( $action ) ) : ?>
|
17 |
+
<button onclick="window.location.href='<?php echo esc_js( $action['url'] ); ?>'"
|
18 |
+
class="button button-primary"><?php echo esc_html( $action['label'] ); ?></button>
|
19 |
+
<?php endif; ?>
|
20 |
+
</p>
|
21 |
+
</div>
|
view/ga_accounts_selector.php
DELETED
@@ -1,26 +0,0 @@
|
|
1 |
-
<div class="wrap">
|
2 |
-
<input type="hidden" name="<?php echo esc_attr( Ga_Admin::GA_SELECTED_ACCOUNT ); ?>"
|
3 |
-
value="<?php echo esc_attr( $selected ); ?>">
|
4 |
-
<select id="ga_account_selector"
|
5 |
-
name="<?php echo esc_attr( Ga_Admin::GA_SELECTED_ACCOUNT ); ?>" <?php echo esc_attr( $add_manually_enabled ? 'disabled="disabled"' : '' ); ?>>
|
6 |
-
<option><?php _e( 'Please select your Google Analytics account:' ); ?></option>
|
7 |
-
<?php
|
8 |
-
if ( ! empty( $selector ) ) {
|
9 |
-
foreach ( $selector as $account ) {
|
10 |
-
?>
|
11 |
-
<optgroup label="<?php echo $account['name']; ?>">
|
12 |
-
<?php foreach ( $account['webProperties'] as $property ): ?>
|
13 |
-
<?php foreach ( $property['profiles'] as $profile ): ?>
|
14 |
-
<option
|
15 |
-
value="<?php echo esc_attr( $account['id'] . "_" . $property['webPropertyId'] . "_" . $profile['id'] ) ?>"
|
16 |
-
<?php echo( $selected === $account['id'] . "_" . $property['webPropertyId'] . "_" . $profile['id'] ? 'selected="selected"' : '' ); ?>><?php echo esc_html( $property['name'] . " [" . $property['webPropertyId'] . "][" . $profile['id'] . "]" ) ?></option>
|
17 |
-
<?php endforeach; ?>
|
18 |
-
<?php endforeach; ?>
|
19 |
-
</optgroup>
|
20 |
-
<?php
|
21 |
-
}
|
22 |
-
}
|
23 |
-
?>
|
24 |
-
</select>
|
25 |
-
</div>
|
26 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
view/ga_auth_button.php
DELETED
@@ -1,7 +0,0 @@
|
|
1 |
-
<button id="ga_authorize_with_google_button" class="<?php echo ( $type == 'auth' ) ? 'button-primary' : 'button-secondary' ?>"
|
2 |
-
<?php if ( Ga_Helper::are_features_enabled() ) : ?>
|
3 |
-
onclick="ga_popup.authorize( event, '<?php echo esc_attr( $url ); ?>' )"
|
4 |
-
<?php endif; ?>
|
5 |
-
<?php echo( ( esc_attr( $manually_id ) || ! Ga_Helper::are_features_enabled() || Ga_Helper::is_curl_disabled() ) ? 'disabled="disabled"' : '' ); ?>
|
6 |
-
><?php _e( $label ) ?>
|
7 |
-
</button>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
view/ga_dashboard_widget.php
DELETED
@@ -1,88 +0,0 @@
|
|
1 |
-
<div class="wrap ga-wrap">
|
2 |
-
|
3 |
-
<div class="form-group">
|
4 |
-
<select id="range-selector" autocomplete="off">
|
5 |
-
<option value="7daysAgo">Last 7 Days</option>
|
6 |
-
<option value="30daysAgo" selected="selected">Last 30 Days</option>
|
7 |
-
<option value="90daysAgo">Last 90 Days</option>
|
8 |
-
</select>
|
9 |
-
|
10 |
-
<select id="metrics-selector" autocomplete="off">
|
11 |
-
<option value="pageviews">Pageviews</option>
|
12 |
-
<option value="sessions">Visits</option>
|
13 |
-
<option value="users">Users</option>
|
14 |
-
<option value="organicSearches">Organic Search</option>
|
15 |
-
<option value="visitBounceRate">Bounce Rate</option>
|
16 |
-
</select>
|
17 |
-
|
18 |
-
<div class="ga-loader-wrapper">
|
19 |
-
<div class="ga-loader"></div>
|
20 |
-
</div>
|
21 |
-
</div>
|
22 |
-
|
23 |
-
<div>
|
24 |
-
<div id="chart_div" style="width: 100%;">
|
25 |
-
<?php if ( $show_trigger_button ): ?>
|
26 |
-
<div style="text-align: center">
|
27 |
-
<div style="margin: 20px auto;">
|
28 |
-
<button id="ga-widget-trigger" style="border: 1px solid #cccccc;width: 60%; padding: 10px"
|
29 |
-
class="button-link">Click here to get data
|
30 |
-
</button>
|
31 |
-
</div>
|
32 |
-
</div>
|
33 |
-
<?php endif; ?>
|
34 |
-
</div>
|
35 |
-
<div id="ga_widget_error" class="notice notice-warning" style="display: none;"></div>
|
36 |
-
<div>
|
37 |
-
<div id="boxes-container">
|
38 |
-
<div class="ga-box-row">
|
39 |
-
<?php if ( ! empty( $boxes ) ) : ?>
|
40 |
-
<?php $iter = 1; ?>
|
41 |
-
<?php foreach ( $boxes as $k => $v ) : ?>
|
42 |
-
<div class="ga-box-column ga-box-dashboard">
|
43 |
-
<div style="color: grey; font-size: 13px;"
|
44 |
-
id="ga_box_dashboard_label_<?php echo $k; ?>"><?php echo $v['label'] ?></div>
|
45 |
-
<div style="font-size: 15px;"
|
46 |
-
id="ga_box_dashboard_value_<?php echo $k; ?>"><?php echo $v['value'] ?></div>
|
47 |
-
</div>
|
48 |
-
<?php if ( ( ( $iter ++ ) % 3 ) == 0 ) : ?>
|
49 |
-
</div>
|
50 |
-
<div class="ga-box-row">
|
51 |
-
<?php endif; ?>
|
52 |
-
<?php endforeach; ?>
|
53 |
-
<?php endif; ?>
|
54 |
-
</div>
|
55 |
-
</div>
|
56 |
-
</div>
|
57 |
-
</div>
|
58 |
-
|
59 |
-
<div style="margin-top: 5px;"><?php echo sprintf( '<a href="%s">' . __( 'Show more details' ) . '</a>',
|
60 |
-
$more_details_url ); ?></div>
|
61 |
-
</div>
|
62 |
-
|
63 |
-
<script type="text/javascript">
|
64 |
-
const GA_NONCE = '<?php echo $ga_nonce; ?>';
|
65 |
-
const GA_NONCE_FIELD = '<?php echo Ga_Admin_Controller::GA_NONCE_FIELD_NAME; ?>';
|
66 |
-
<?php if ( empty( $show_trigger_button ) ): ?>
|
67 |
-
<?php if ( ! empty( $chart ) ) : ?>
|
68 |
-
dataArr = [['Day', 'Pageviews'],<?php
|
69 |
-
$arr = "";
|
70 |
-
foreach ( $chart as $row ) {
|
71 |
-
if ( $arr ) {
|
72 |
-
$arr .= ",";
|
73 |
-
}
|
74 |
-
$arr .= "['" . $row['day'] . "'," . $row['current'] . "]";
|
75 |
-
}
|
76 |
-
|
77 |
-
echo $arr;
|
78 |
-
?>];
|
79 |
-
|
80 |
-
ga_dashboard.init(dataArr, true);
|
81 |
-
ga_dashboard.events(dataArr);
|
82 |
-
<?php endif; ?>
|
83 |
-
<?php else: ?>
|
84 |
-
dataArr = [['Day', 'Pageviews'], []];
|
85 |
-
ga_dashboard.init(false, false);
|
86 |
-
ga_dashboard.events();
|
87 |
-
<?php endif; ?>
|
88 |
-
</script>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
view/ga_debug_modal.php
DELETED
@@ -1,32 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
$show_modal = !empty($_GET['sdb']) ? 'style=display:block;' : '';
|
3 |
-
?>
|
4 |
-
|
5 |
-
<div id="ga_debug_modal" class="ga-modal" tabindex="-1" <?php echo esc_attr( $show_modal ); ?>>
|
6 |
-
<div class="ga-modal-dialog">
|
7 |
-
<div id="ga_debug_modal_content" class="ga-modal-content">
|
8 |
-
<div class="ga-modal-header">
|
9 |
-
<h4 class="ga-modal-title"><?php _e( 'Debug helper:' ) ?></h4>
|
10 |
-
<span id="ga_close" class="ga-close">×</span>
|
11 |
-
</div>
|
12 |
-
<div class="ga-modal-body">
|
13 |
-
<div class="ga-loader-wrapper">
|
14 |
-
<div class="ga-loader"></div>
|
15 |
-
</div>
|
16 |
-
<div class="ga-debug-form-div">
|
17 |
-
<?php if ( is_array( $debug_info ) ) : ?>
|
18 |
-
<?php echo wp_kses_post( $debug_info['message'] ); ?>
|
19 |
-
<?php else : ?>
|
20 |
-
<h4 class="ga-modal-title"><?php _e( 'Copy and paste this debug info into an email and send to support@sharethis.com' ) ?></h4>
|
21 |
-
<label for="ga_debug_info" class="ga-debug-form-label"><strong><?php _e( 'Debug info' ); ?></strong>:</label>
|
22 |
-
<textarea id="ga_debug_info" class="ga-debug-form-field" rows="8" cols="50"><?php echo esc_html($debug_info); ?></textarea>
|
23 |
-
<div class="ga-modal-footer">
|
24 |
-
<button type="button" id="copy-debug" class="button"><?php esc_html_e( 'Copy', 'google-analytics' ); ?></button>
|
25 |
-
<button id="ga_btn_close" type="button" class="button">Close</button>
|
26 |
-
</div>
|
27 |
-
<?php endif; ?>
|
28 |
-
</div>
|
29 |
-
</div>
|
30 |
-
</div><!-- /.modal-content -->
|
31 |
-
</div><!-- /.modal-dialog -->
|
32 |
-
</div><!-- /.modal -->
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
view/ga_googleanalytics_loader.php
DELETED
@@ -1,10 +0,0 @@
|
|
1 |
-
<script>
|
2 |
-
jQuery(document).ready(function () {
|
3 |
-
jQuery.post('<?php echo esc_attr( $ajaxurl ); ?>', {action: 'googleanalytics_get_script'}, function(response) {
|
4 |
-
var s = document.createElement("script");
|
5 |
-
s.type = "text/javascript";
|
6 |
-
s.innerHTML = response;
|
7 |
-
jQuery("head").append(s);
|
8 |
-
});
|
9 |
-
});
|
10 |
-
</script>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
view/ga_notice.php
DELETED
@@ -1,16 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
$url = isset($url) ? $url : '';
|
3 |
-
?>
|
4 |
-
<div id="googleanalytics_terms_notice"
|
5 |
-
class="notice notice-warning <?php echo Ga_Helper::is_plugin_page() ? '' : 'is-dismissible'; ?>">
|
6 |
-
<p>
|
7 |
-
Google Analytics <?php echo esc_html(GOOGLEANALYTICS_VERSION); ?> plugin <a
|
8 |
-
href="http://www.sharethis.com/news/2016/12/sharethis-adds-analytics-plugin-to-suite-of-tools/"
|
9 |
-
target="_blank">has joined the ShareThis family.</a> <strong>A host of new features</strong> have been
|
10 |
-
added in this version, including Google Analytics dashboards, demographics and device data.
|
11 |
-
The update requires agreeing to the <a href="http://www.sharethis.com/privacy/" target="_blank">privacy
|
12 |
-
policy</a> and <a
|
13 |
-
href="http://www.sharethis.com/publisher-terms-of-use/" target="_blank">terms of use</a> to enable them.
|
14 |
-
<a href="<?php echo esc_url($url); ?>"><span class="button button-primary">I accept</span></a>
|
15 |
-
</p>
|
16 |
-
</div>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
view/ga_oauth_notice.php
DELETED
@@ -1,3 +0,0 @@
|
|
1 |
-
<div class="ga-alert ga-alert-warning">
|
2 |
-
<?php echo $msg; ?>
|
3 |
-
</div>
|
|
|
|
|
|
view/ga_wp_notice.php
DELETED
@@ -1,9 +0,0 @@
|
|
1 |
-
<div class="notice notice-<?php echo $type; ?> <?php echo( ! empty( $is_dismissable ) ? 'is-dismissible' : '' ); ?>">
|
2 |
-
<p><?php echo $msg; ?>
|
3 |
-
<?php if ( ! empty( $action ) ): ?>
|
4 |
-
|
5 |
-
<button onclick="window.location.href='<?php echo $action['url']; ?>'"
|
6 |
-
class="button button-primary"><?php echo $action['label']; ?></button>
|
7 |
-
<?php endif; ?>
|
8 |
-
</p>
|
9 |
-
</div>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
view/page.php
CHANGED
@@ -1,268 +1,374 @@
|
|
1 |
<?php
|
|
|
|
|
|
|
|
|
|
|
|
|
2 |
$optimize_code = get_option( 'googleanalytics_optimize_code' );
|
3 |
$universal = get_option( 'googleanalytics_enable_universal_analytics', true );
|
4 |
$anonymization = get_option( 'googleanalytics_ip_anonymization', true );
|
5 |
-
$
|
6 |
-
$
|
7 |
-
$
|
|
|
8 |
?>
|
9 |
-
<div id="adblocker-notice" class="notice notice-error is-dismissible">
|
10 |
-
|
11 |
-
|
12 |
-
|
13 |
-
|
14 |
-
|
15 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
16 |
</div>
|
17 |
-
|
18 |
-
<div
|
19 |
-
|
20 |
-
|
21 |
-
|
22 |
-
|
23 |
-
|
24 |
-
|
25 |
-
|
26 |
-
|
27 |
-
|
28 |
-
|
29 |
-
|
30 |
-
|
31 |
-
|
32 |
-
|
33 |
-
|
34 |
-
|
35 |
-
|
36 |
-
|
37 |
-
|
38 |
-
|
39 |
-
|
40 |
-
|
41 |
-
|
42 |
-
</div><!-- /.modal -->
|
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 |
-
|
168 |
-
|
169 |
-
|
170 |
-
|
|
|
171 |
|
172 |
-
|
173 |
-
|
174 |
-
|
175 |
-
|
176 |
|
177 |
-
|
178 |
-
|
179 |
-
|
180 |
-
|
181 |
-
|
182 |
-
|
183 |
-
|
184 |
-
|
185 |
-
|
186 |
-
|
187 |
-
|
188 |
-
|
189 |
-
|
190 |
-
|
191 |
-
|
192 |
-
|
193 |
-
|
194 |
-
|
195 |
-
|
196 |
-
|
197 |
-
|
198 |
-
|
199 |
-
|
200 |
-
|
201 |
-
|
202 |
-
|
203 |
-
|
204 |
-
|
205 |
-
|
206 |
-
|
207 |
-
|
208 |
-
|
209 |
-
|
210 |
-
|
211 |
-
|
212 |
-
|
213 |
-
|
214 |
-
|
215 |
-
|
216 |
-
|
217 |
-
|
218 |
-
|
219 |
-
|
220 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
221 |
|
222 |
-
|
223 |
-
|
224 |
-
|
225 |
-
|
226 |
-
|
227 |
-
|
228 |
-
|
229 |
-
|
230 |
-
|
231 |
-
|
232 |
-
|
233 |
-
|
234 |
-
|
235 |
-
|
236 |
-
|
237 |
-
|
238 |
-
|
239 |
-
|
240 |
-
|
241 |
-
|
242 |
-
|
243 |
-
|
244 |
-
|
245 |
-
|
246 |
-
|
247 |
-
|
248 |
-
|
249 |
-
|
250 |
-
|
251 |
-
|
252 |
-
|
253 |
-
|
254 |
-
|
255 |
-
|
|
|
|
|
|
|
|
|
|
|
256 |
|
257 |
-
|
258 |
-
|
259 |
-
|
260 |
-
</div>
|
261 |
-
<script type="text/javascript">
|
262 |
-
|
263 |
-
|
264 |
-
|
265 |
-
|
266 |
-
|
267 |
-
</script>
|
268 |
-
<?php
|
|
1 |
<?php
|
2 |
+
/**
|
3 |
+
* Page view.
|
4 |
+
*
|
5 |
+
* @package GoogleAnalytics
|
6 |
+
*/
|
7 |
+
|
8 |
$optimize_code = get_option( 'googleanalytics_optimize_code' );
|
9 |
$universal = get_option( 'googleanalytics_enable_universal_analytics', true );
|
10 |
$anonymization = get_option( 'googleanalytics_ip_anonymization', true );
|
11 |
+
$debug_mode = get_option( 'googleanalytics_enable_debug_mode', 'off' );
|
12 |
+
$gdpr_config = get_option( 'googleanalytics_gdpr_config' );
|
13 |
+
$plugin_dir = plugin_dir_path( __FILE__ );
|
14 |
+
$plugin_uri = trailingslashit( get_home_url() ) . 'wp-content/plugins/googleanalytics/';
|
15 |
?>
|
16 |
+
<div id="adblocker-notice" class="notice notice-error is-dismissible">
|
17 |
+
<p>
|
18 |
+
<?php
|
19 |
+
esc_html_e(
|
20 |
+
'It appears you have an ad blocker enabled. To avoid affecting this plugin\'s functionality, please disable while using its admin configurations and registrations. Thank you.',
|
21 |
+
'googleanalytics'
|
22 |
+
);
|
23 |
+
?>
|
24 |
+
</p>
|
25 |
+
</div>
|
26 |
+
<div id="detectadblock">
|
27 |
+
<div class="adBanner">
|
28 |
+
</div>
|
29 |
</div>
|
30 |
+
<div id="ga_access_code_modal" class="ga-modal" tabindex="-1">
|
31 |
+
<div class="ga-modal-dialog">
|
32 |
+
<div class="ga-modal-content">
|
33 |
+
<div class="ga-modal-header">
|
34 |
+
<span id="ga_close" class="ga-close">×</span>
|
35 |
+
<h4 class="ga-modal-title">
|
36 |
+
<?php esc_html_e( 'Please paste the access code obtained from Google below:' ); ?>
|
37 |
+
</h4>
|
38 |
+
</div>
|
39 |
+
<div class="ga-modal-body">
|
40 |
+
<div id="ga_code_error" class="ga-alert ga-alert-danger" style="display: none;"></div>
|
41 |
+
<label for="ga_access_code"><strong><?php esc_html_e( 'Access Code' ); ?></strong>:</label>
|
42 |
+
<input id="ga_access_code_tmp" type="text"
|
43 |
+
placeholder="<?php esc_html_e( 'Paste your access code here' ); ?>"/>
|
44 |
+
<div class="ga-loader-wrapper">
|
45 |
+
<div class="ga-loader"></div>
|
46 |
+
</div>
|
47 |
+
</div>
|
48 |
+
<div class="ga-modal-footer">
|
49 |
+
<button id="ga_btn_close" type="button" class="button">Close</button>
|
50 |
+
<button type="button" class="button-primary"
|
51 |
+
id="ga_save_access_code"
|
52 |
+
onclick="ga_popup.saveAccessCode( event )"><?php esc_html_e( 'Save Changes' ); ?></button>
|
53 |
+
</div>
|
54 |
+
</div><!-- /.modal-content -->
|
55 |
+
</div><!-- /.modal-dialog -->
|
56 |
+
</div><!-- /.modal -->
|
57 |
+
<?php echo wp_kses_post( $data['debug_modal'] ); ?>
|
58 |
+
<div class="wrap ga-wrap">
|
59 |
+
<h2>Google Analytics - <?php esc_html_e( 'Settings' ); ?></h2>
|
60 |
+
<div class="ga_container">
|
61 |
+
<?php if ( false === empty( $data['error_message'] ) ) : ?>
|
62 |
+
<?php echo wp_kses_post( $data['error_message'] ); ?>
|
63 |
+
<?php endif; ?>
|
64 |
+
<form id="ga_form" method="post" action="options.php">
|
65 |
+
<?php settings_fields( 'googleanalytics' ); ?>
|
66 |
+
<input id="ga_access_code" type="hidden"
|
67 |
+
name="<?php echo esc_attr( Ga_Admin::GA_OAUTH_AUTH_CODE_OPTION_NAME ); ?>" value=""/>
|
68 |
+
<table class="form-table">
|
69 |
+
<tr>
|
70 |
+
<?php if ( false === empty( $data['popup_url'] ) ) : ?>
|
71 |
+
<th scope="row">
|
72 |
+
<label class="<?php echo esc_attr( false === Ga_Helper::are_features_enabled() ? 'label-grey ga-tooltip"' : '' ); ?>">
|
73 |
+
<?php esc_html_e( 'Google Profile' ); ?>:
|
74 |
+
<span class="ga-tooltiptext ga-tt-abs"><?php echo esc_html( $tooltip ); ?></span>
|
75 |
+
</label>
|
76 |
+
</th>
|
77 |
+
<td <?php echo esc_attr( false === Ga_Helper::are_features_enabled() ? 'class="ga-tooltip"' : '' ); ?>>
|
78 |
+
<?php
|
79 |
+
echo wp_kses(
|
80 |
+
$data['auth_button'],
|
81 |
+
array(
|
82 |
+
'button' => array(
|
83 |
+
'class' => array(),
|
84 |
+
'id' => array(),
|
85 |
+
'onclick' => array(),
|
86 |
+
),
|
87 |
+
)
|
88 |
+
);
|
89 |
+
?>
|
90 |
+
<span class="ga-tooltiptext"><?php echo esc_html( $tooltip ); ?></span>
|
91 |
+
<?php if ( false === empty( $data[ Ga_Admin::GA_WEB_PROPERTY_ID_MANUALLY_OPTION_NAME ] ) ) : ?>
|
92 |
+
<div class="ga_warning">
|
93 |
+
<strong><?php esc_html_e( 'Notice' ); ?></strong>: 
|
94 |
+
<?php esc_html_e( 'Please uncheck the "Manually enter Tracking ID" option to authenticate and view statistics.' ); ?>
|
95 |
+
</div>
|
96 |
+
<?php endif; ?>
|
97 |
+
</td>
|
98 |
+
<?php endif; ?>
|
99 |
|
100 |
+
<?php if ( false === empty( $data['ga_accounts_selector'] ) ) : ?>
|
101 |
+
<th scope="row"><?php esc_html_e( 'Google Analytics Account' ); ?>:</th>
|
102 |
+
<?php endif; ?>
|
103 |
+
</tr>
|
104 |
+
<?php if ( false === empty( $data['ga_accounts_selector'] ) ) : ?>
|
105 |
+
<tr>
|
106 |
+
<td>
|
107 |
+
<?php
|
108 |
+
echo wp_kses(
|
109 |
+
$data['ga_accounts_selector'],
|
110 |
+
array(
|
111 |
+
'input' => array(
|
112 |
+
'name' => array(),
|
113 |
+
'type' => array(),
|
114 |
+
'value' => array(),
|
115 |
+
),
|
116 |
+
'select' => array(
|
117 |
+
'id' => array(),
|
118 |
+
'name' => array(),
|
119 |
+
),
|
120 |
+
'option' => array(
|
121 |
+
'value' => array(),
|
122 |
+
'selected' => array(),
|
123 |
+
),
|
124 |
+
'optgroup' => array(
|
125 |
+
'label' => array(),
|
126 |
+
),
|
127 |
+
)
|
128 |
+
);
|
129 |
+
?>
|
130 |
+
</td>
|
131 |
+
<td>
|
132 |
+
<button id="ga_sign_out" class="button-secondary" type="button">
|
133 |
+
<?php esc_html_e( 'Sign out', 'googleanalytics' ); ?>
|
134 |
+
</button>
|
135 |
+
</td>
|
136 |
+
</tr>
|
137 |
+
<?php endif; ?>
|
138 |
+
<tr>
|
139 |
+
<th scope="row">
|
140 |
+
<div class="checkbox">
|
141 |
+
<label class="ga_checkbox_label <?php echo esc_attr( Ga_Helper::get_code_manually_label_classes() ); ?>"
|
142 |
+
for="ga_enter_code_manually"> <input
|
143 |
+
<?php if ( true === Ga_Helper::are_features_enabled() ) : ?>
|
144 |
+
onclick="ga_events.click( this, ga_events.codeManuallyCallback( <?php echo esc_js( Ga_Helper::are_features_enabled() ? 1 : 0 ); ?> ) )"
|
145 |
+
<?php endif; ?>
|
146 |
+
type="checkbox"
|
147 |
+
<?php echo disabled( false === Ga_Helper::are_features_enabled() ); ?>
|
148 |
+
name="<?php echo esc_attr( Ga_Admin::GA_WEB_PROPERTY_ID_MANUALLY_OPTION_NAME ); ?>"
|
149 |
+
id="ga_enter_code_manually"
|
150 |
+
value="1"
|
151 |
+
<?php
|
152 |
+
checked(
|
153 |
+
false === empty( $data[ Ga_Admin::GA_WEB_PROPERTY_ID_MANUALLY_OPTION_NAME ] )
|
154 |
+
|| false === Ga_Helper::are_terms_accepted()
|
155 |
+
);
|
156 |
+
?>
|
157 |
+
/>
|
158 |
+
<?php esc_html_e( 'Manually enter Tracking ID' ); ?>
|
159 |
+
<span class="ga-tooltiptext ga-tt-abs"><?php echo esc_html( $tooltip ); ?></span>
|
160 |
+
</label>
|
161 |
+
<?php if ( false === Ga_Helper::are_features_enabled() ) : ?>
|
162 |
+
<input id="ga_enter_code_manually_hidden" type="hidden"
|
163 |
+
name="<?php echo esc_attr( Ga_Admin::GA_WEB_PROPERTY_ID_MANUALLY_OPTION_NAME ); ?>"
|
164 |
+
value="1"/>
|
165 |
+
<?php endif; ?>
|
166 |
+
</div>
|
167 |
+
</th>
|
168 |
+
<td></td>
|
169 |
+
</tr>
|
170 |
+
<tr
|
171 |
+
id="ga_manually_wrapper"
|
172 |
+
class="
|
173 |
+
<?php
|
174 |
+
echo esc_attr(
|
175 |
+
false === empty( $data[ Ga_Admin::GA_WEB_PROPERTY_ID_MANUALLY_OPTION_NAME ] )
|
176 |
+
|| ! Ga_Helper::are_features_enabled() ? '' : 'hidden'
|
177 |
+
);
|
178 |
+
?>
|
179 |
+
"
|
180 |
+
>
|
181 |
|
182 |
+
<th scope="row"><?php esc_html_e( 'Tracking ID' ); ?>:</th>
|
183 |
+
</tr>
|
184 |
+
<tr valing="top">
|
185 |
+
<td>
|
186 |
+
<input type="text"
|
187 |
+
name="<?php echo esc_attr( Ga_Admin::GA_WEB_PROPERTY_ID_MANUALLY_VALUE_OPTION_NAME ); ?>"
|
188 |
+
value="<?php echo esc_attr( $data[ Ga_Admin::GA_WEB_PROPERTY_ID_MANUALLY_VALUE_OPTION_NAME ] ); ?>"
|
189 |
+
id="ga_manually_input"/>
|
190 |
+
<div class="ga_warning">
|
191 |
+
<strong><?php esc_html_e( 'Warning' ); ?></strong>: <?php esc_html_e( 'If you enter your Tracking ID manually, Analytics statistics will not be shown.' ); ?>
|
192 |
+
<br>
|
193 |
+
<?php esc_html_e( 'We strongly recommend to authenticate with Google using the button above.' ); ?>
|
194 |
+
</div>
|
195 |
+
</td>
|
196 |
+
</tr>
|
197 |
+
<tr id="ga_roles_wrapper">
|
198 |
+
<th scope="row">
|
199 |
+
<label class="<?php echo esc_attr( false === Ga_Helper::are_features_enabled() ? 'label-grey ga-tooltip' : '' ); ?>">
|
200 |
+
<?php esc_html_e( 'Exclude Tracking for Roles' ); ?>
|
201 |
+
:
|
202 |
+
<span class="ga-tooltiptext ga-tt-abs"><?php echo esc_html( $tooltip ); ?></span>
|
203 |
+
</label>
|
204 |
+
</th>
|
205 |
+
</tr>
|
206 |
+
<tr>
|
207 |
+
<td>
|
208 |
+
<?php
|
209 |
+
if ( false === empty( $data['roles'] ) ) {
|
210 |
+
$roles = $data['roles'];
|
211 |
+
foreach ( $roles as $role_item ) {
|
212 |
+
?>
|
213 |
+
<div class="checkbox">
|
214 |
+
<label class="ga_checkbox_label <?php echo esc_attr( ! Ga_Helper::are_features_enabled() ? 'label-grey ga-tooltip' : '' ); ?>"
|
215 |
+
for="checkbox_<?php echo esc_attr( $role_item['id'] ); ?>">
|
216 |
+
<input id="checkbox_<?php echo esc_attr( $role_item['id'] ); ?>" type="checkbox"
|
217 |
+
<?php echo disabled( false === Ga_Helper::are_features_enabled() ); ?>
|
218 |
+
name="<?php echo esc_attr( Ga_Admin::GA_EXCLUDE_ROLES_OPTION_NAME . '[' . $role_item['id'] . ']' ); ?>"
|
219 |
+
id="<?php echo esc_attr( $role_item['id'] ); ?>"
|
220 |
+
<?php echo esc_attr( ( $role_item['checked'] ? 'checked="checked"' : '' ) ); ?> />
|
221 |
+
<?php echo esc_html( $role_item['name'] ); ?>
|
222 |
+
<span class="ga-tooltiptext"><?php echo esc_html( $tooltip ); ?></span>
|
223 |
+
</label>
|
224 |
+
</div>
|
225 |
+
<?php
|
226 |
+
}
|
227 |
+
}
|
228 |
+
?>
|
229 |
+
</td>
|
230 |
+
</tr>
|
231 |
+
<tr>
|
232 |
+
<th scope="row"><?php esc_html_e( 'Enable IP Anonymization' ); ?>:</th>
|
233 |
+
</tr>
|
234 |
+
<tr>
|
235 |
+
<td>
|
236 |
+
<label class="ga-switch <?php echo esc_attr( ! Ga_Helper::are_features_enabled() ? 'label-grey ga-tooltip' : '' ); ?>">
|
237 |
+
<?php if ( true === Ga_Helper::are_features_enabled() ) : ?>
|
238 |
+
<input id="ga-anonymization" name="googleanalytics_ip_anonymization"
|
239 |
+
type="checkbox" <?php echo checked( $anonymization, 'on' ); ?>>
|
240 |
|
241 |
+
<div id="ga-slider" class="ga-slider round"></div>
|
242 |
+
<?php else : ?>
|
243 |
+
<input id="ga-anonymization" name="googleanalytics_ip_anonymization"
|
244 |
+
type="checkbox" disabled="disabled">
|
245 |
|
246 |
+
<div id="ga-slider" class="ga-slider round"></div>
|
247 |
+
<span class="ga-tooltiptext ga-tt-abs"><?php echo esc_html( $tooltip ); ?></span>
|
248 |
+
<?php endif; ?>
|
249 |
+
</label>
|
250 |
+
</td>
|
251 |
+
</tr>
|
252 |
+
<tr>
|
253 |
+
<th scope="row"><?php esc_html_e( 'If using Google Optimize, enter optimize code here' ); ?>:</th>
|
254 |
+
</tr>
|
255 |
+
<tr>
|
256 |
+
<td>
|
257 |
+
<label class="ga-text <?php echo esc_attr( false === Ga_Helper::are_features_enabled() ? 'label-grey ga-tooltip' : '' ); ?>">
|
258 |
+
<?php if ( true === Ga_Helper::are_features_enabled() ) : ?>
|
259 |
+
<input id="ga-optimize" name="googleanalytics_optimize_code"
|
260 |
+
type="text" placeholder="GTM-XXXXXX"
|
261 |
+
value="<?php echo esc_attr( $optimize_code ); ?>">
|
262 |
+
<?php else : ?>
|
263 |
+
<input id="ga-optimize" name="googleanalytics_optimize_code"
|
264 |
+
type="text" placeholder="GTM-XXXXXX"
|
265 |
+
value="<?php echo esc_attr( $optimize_code ); ?>" readonly>
|
266 |
+
<span class="ga-tooltiptext ga-tt-abs"><?php echo esc_html( $tooltip ); ?></span>
|
267 |
+
<?php endif; ?>
|
268 |
+
</label>
|
269 |
+
</td>
|
270 |
+
</tr>
|
271 |
+
<tr>
|
272 |
+
<th scope="row"><?php esc_html_e( 'Disable all features' ); ?>:</th>
|
273 |
+
</tr>
|
274 |
+
<tr>
|
275 |
+
<td>
|
276 |
+
<label class="ga-switch <?php echo esc_attr( ! Ga_Helper::are_features_enabled() ? 'label-grey ga-tooltip' : '' ); ?>">
|
277 |
+
<?php if ( true === Ga_Helper::are_features_enabled() ) : ?>
|
278 |
+
<input id="ga-disable"
|
279 |
+
name="<?php echo esc_attr( Ga_Admin::GA_DISABLE_ALL_FEATURES ); ?>"
|
280 |
+
type="checkbox">
|
281 |
+
<div id="ga-slider" class="ga-slider-disable ga-slider round"></div>
|
282 |
+
<?php else : ?>
|
283 |
+
<input id="ga-disable"
|
284 |
+
name="<?php echo esc_attr( Ga_Admin::GA_DISABLE_ALL_FEATURES ); ?>"
|
285 |
+
type="checkbox" disabled="disabled">
|
286 |
+
<div id="ga-slider" class="ga-slider-disable ga-slider round"></div>
|
287 |
+
<span class="ga-tooltiptext ga-tt-abs"><?php echo esc_html( $tooltip ); ?></span>
|
288 |
+
<?php endif; ?>
|
289 |
+
</label>
|
290 |
+
</td>
|
291 |
+
</tr>
|
292 |
+
<tr>
|
293 |
+
<th scope="row"><?php esc_html_e( 'Turn on GA Debugging' ); ?>:</th>
|
294 |
+
</tr>
|
295 |
+
<tr>
|
296 |
+
<td>
|
297 |
+
<label class="ga-switch <?php echo esc_attr( false === Ga_Helper::are_features_enabled() ? 'label-grey ga-tooltip' : '' ); ?>">
|
298 |
+
<?php if ( true === Ga_Helper::are_features_enabled() ) : ?>
|
299 |
+
<input id="ga-debugging" name="googleanalytics_enable_debug_mode"
|
300 |
+
type="checkbox" <?php echo checked( $debug_mode, 'on' ); ?>>
|
301 |
+
<div id="ga-slider" class="ga-slider round"></div>
|
302 |
+
<?php else : ?>
|
303 |
+
<input id="ga-debugging" name="googleanalytics_enable_debug_mode"
|
304 |
+
type="checkbox" disabled="disabled">
|
305 |
+
<div id="ga-slider" class="ga-slider round"></div>
|
306 |
+
<?php endif; ?>
|
307 |
+
</label>
|
308 |
+
<div class="ga_warning">
|
309 |
+
<strong><?php esc_html_e( 'WARNING' ); ?></strong>: 
|
310 |
+
<?php
|
311 |
+
esc_html_e(
|
312 |
+
'For debugging purposes only! Should NOT be used on live sites!',
|
313 |
+
'googleanalytics'
|
314 |
+
);
|
315 |
+
?>
|
316 |
+
</div>
|
317 |
+
</td>
|
318 |
+
</tr>
|
319 |
+
<?php require $plugin_dir . 'templates/gdpr.php'; ?>
|
320 |
+
</table>
|
321 |
|
322 |
+
<p class="submit">
|
323 |
+
<input type="submit" class="button-primary"
|
324 |
+
value="<?php esc_html_e( 'Save Changes' ); ?>"/>
|
325 |
+
</p>
|
326 |
+
</form>
|
327 |
+
<?php
|
328 |
+
// If GDPR isn't enabled show ad otherwise show demo ad.
|
329 |
+
if ( true === empty( $gdpr_config ) ) {
|
330 |
+
include $plugin_dir . 'templates/sidebar/gdpr-ad.php';
|
331 |
+
} else {
|
332 |
+
// If Demo is not enabled show ad.
|
333 |
+
if ( true === empty( get_option( 'googleanalytics_demographic' ) ) ) {
|
334 |
+
include $plugin_dir . 'templates/sidebar/demo-ad.php';
|
335 |
+
}
|
336 |
+
}
|
337 |
+
?>
|
338 |
+
</div>
|
339 |
+
<?php if ( false === empty( $data['debug_info'] ) ) : ?>
|
340 |
+
<tr>
|
341 |
+
<td colspan="2">
|
342 |
+
<p>If you are still experiencing an issue, we are here to help! We recommend clickingthe "Send
|
343 |
+
Debugging Info" button below and pasting the information within an email to
|
344 |
+
support@sharethis.com.</p>
|
345 |
+
<p>
|
346 |
+
<button id="ga_debug_button" class="button button-secondary"
|
347 |
+
onclick="ga_debug.open_modal( event )">Send Debugging Info
|
348 |
+
</button>
|
349 |
+
<?php if ( false === empty( $data['ga_accounts_selector'] ) ) : ?>
|
350 |
+
<?php echo wp_kses_post( $data['auth_button'] ); ?>
|
351 |
+
<br>
|
352 |
+
<small class="notice">
|
353 |
+
*If you reset your google password you MUST re-authenticate to continue viewing your
|
354 |
+
analytics dashboard.
|
355 |
+
</small>
|
356 |
+
<?php endif; ?>
|
357 |
+
</p>
|
358 |
+
</td>
|
359 |
+
</tr>
|
360 |
+
<?php endif; ?>
|
361 |
|
362 |
+
<p class="ga-love-text"><?php esc_html_e( 'Love this plugin?' ); ?> <a
|
363 |
+
href="https://wordpress.org/support/plugin/googleanalytics/reviews/#new-post"><?php esc_html_e( ' Please help spread the word by leaving a 5-star review!' ); ?> </a>
|
364 |
+
</p>
|
365 |
+
</div>
|
366 |
+
<script type="text/javascript">
|
367 |
+
const GA_DISABLE_FEATURE_URL = '<?php echo esc_url( Ga_Helper::create_url( admin_url( Ga_Helper::GA_SETTINGS_PAGE_URL ), array( Ga_Controller_Core::ACTION_PARAM_NAME => 'ga_action_disable_all_features' ) ) ); ?>';
|
368 |
+
const GA_ENABLE_FEATURE_URL = '<?php echo esc_url( Ga_Helper::create_url( admin_url( Ga_Helper::GA_SETTINGS_PAGE_URL ), array( Ga_Controller_Core::ACTION_PARAM_NAME => 'ga_action_enable_all_features' ) ) ); ?>';
|
369 |
+
jQuery( document ).ready( function() {
|
370 |
+
ga_switcher.init( '<?php echo esc_js( $data[ Ga_Admin::GA_DISABLE_ALL_FEATURES ] ); ?>' );
|
371 |
+
} );
|
372 |
+
</script>
|
373 |
+
<?php
|
374 |
+
require 'templates/demo-popup.php';
|
view/statistics.php
CHANGED
@@ -1,25 +1,88 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
<div class="wrap ga-wrap">
|
2 |
-
|
3 |
-
|
4 |
-
<?php
|
5 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
6 |
|
7 |
-
<?php if (empty(get_option('googleanalytics-hide-review'))) : ?>
|
8 |
<div class="ga-review-us">
|
9 |
<h3>
|
10 |
-
<?php
|
11 |
<br>
|
12 |
<a href="https://wordpress.org/support/plugin/googleanalytics/reviews/#new-post">
|
13 |
-
<?php
|
|
|
|
|
|
|
|
|
|
|
14 |
</a>
|
15 |
-
<p>
|
16 |
-
<div id="close-review-us">close</div>
|
17 |
-
</p>
|
18 |
</h3>
|
19 |
</div>
|
20 |
<?php endif; ?>
|
21 |
</div>
|
22 |
<script type="text/javascript">
|
23 |
-
const GA_NONCE = '<?php echo wp_create_nonce( 'ga_ajax_data_change' ); ?>';
|
24 |
-
const GA_NONCE_FIELD = '<?php echo Ga_Admin_Controller::GA_NONCE_FIELD_NAME; ?>';
|
25 |
-
</script>
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Statistics view.
|
4 |
+
*
|
5 |
+
* @package GoogleAnalytics
|
6 |
+
*/
|
7 |
+
|
8 |
+
$data = isset( $data ) ? $data : '';
|
9 |
+
?>
|
10 |
<div class="wrap ga-wrap">
|
11 |
+
<h2>Google Analytics - <?php echo esc_html__( 'Dashboard', 'googleanalytics' ); ?></h2>
|
12 |
+
<div class="ga_container" id="exTab2">
|
13 |
+
<?php
|
14 |
+
echo wp_kses(
|
15 |
+
$data,
|
16 |
+
array(
|
17 |
+
'a' => array(
|
18 |
+
'class' => array(),
|
19 |
+
'href' => array(),
|
20 |
+
),
|
21 |
+
'button' => array(
|
22 |
+
'class' => array(),
|
23 |
+
'id' => array(),
|
24 |
+
'onclick' => array(),
|
25 |
+
),
|
26 |
+
'div' => array(
|
27 |
+
'class' => array(),
|
28 |
+
'id' => array(),
|
29 |
+
'data-scroll' => array(),
|
30 |
+
'style' => array(),
|
31 |
+
),
|
32 |
+
'form' => array(
|
33 |
+
'action' => array(),
|
34 |
+
'method' => array(),
|
35 |
+
),
|
36 |
+
'input' => array(
|
37 |
+
'name' => array(),
|
38 |
+
'type' => array(),
|
39 |
+
'value' => array(),
|
40 |
+
),
|
41 |
+
'img' => array(
|
42 |
+
'src' => array(),
|
43 |
+
),
|
44 |
+
'label' => array(
|
45 |
+
'for' => array(),
|
46 |
+
),
|
47 |
+
'p' => array(),
|
48 |
+
'script' => array(),
|
49 |
+
'strong' => array(),
|
50 |
+
'table' => array(
|
51 |
+
'class' => array(),
|
52 |
+
),
|
53 |
+
'td' => array(
|
54 |
+
'class' => array(),
|
55 |
+
'colspan' => array(),
|
56 |
+
'style' => array(),
|
57 |
+
),
|
58 |
+
'th' => array(
|
59 |
+
'style' => array(),
|
60 |
+
),
|
61 |
+
'tr' => array(),
|
62 |
+
)
|
63 |
+
);
|
64 |
+
?>
|
65 |
+
</div>
|
66 |
|
67 |
+
<?php if ( true === empty( get_option( 'googleanalytics-hide-review' ) ) ) : ?>
|
68 |
<div class="ga-review-us">
|
69 |
<h3>
|
70 |
+
<?php esc_html_e( 'Love this plugin?', 'googleanalytics' ); ?>
|
71 |
<br>
|
72 |
<a href="https://wordpress.org/support/plugin/googleanalytics/reviews/#new-post">
|
73 |
+
<?php
|
74 |
+
esc_html_e(
|
75 |
+
'Please spread the word by leaving us a 5 star review!',
|
76 |
+
'googleanalytics'
|
77 |
+
);
|
78 |
+
?>
|
79 |
</a>
|
80 |
+
<p><div id="close-review-us"><?php esc_html_e( 'close' ); ?></div></p>
|
|
|
|
|
81 |
</h3>
|
82 |
</div>
|
83 |
<?php endif; ?>
|
84 |
</div>
|
85 |
<script type="text/javascript">
|
86 |
+
const GA_NONCE = '<?php echo esc_js( wp_create_nonce( 'ga_ajax_data_change' ) ); ?>';
|
87 |
+
const GA_NONCE_FIELD = '<?php echo esc_js( Ga_Admin_Controller::GA_NONCE_FIELD_NAME ); ?>';
|
88 |
+
</script>
|
view/stats.php
CHANGED
@@ -1,6 +1,16 @@
|
|
1 |
<?php
|
2 |
-
|
3 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
4 |
|
5 |
foreach ( $account_data as $properties ) {
|
6 |
if ( $properties['id'] === $selected_data[0] ) {
|
@@ -12,99 +22,132 @@ foreach ( $account_data as $properties ) {
|
|
12 |
}
|
13 |
}
|
14 |
|
15 |
-
$demo_enabled = get_option('googleanalytics_demographic');
|
16 |
-
$demo_enabled =
|
17 |
-
|
18 |
-
$
|
19 |
-
$
|
20 |
-
$
|
21 |
-
|
22 |
-
$
|
23 |
-
$
|
24 |
-
|
25 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
26 |
|
27 |
// Filter GA Action.
|
28 |
$ga_action = filter_input( INPUT_GET, 'ga_action', FILTER_SANITIZE_STRING );
|
29 |
|
30 |
-
$date_range = Ga_Helper::
|
31 |
|
32 |
-
$days_in_english = Ga_Helper::
|
33 |
?>
|
34 |
-
<?php
|
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 |
</div>
|
61 |
-
<div class="ga-panel
|
62 |
-
<div
|
63 |
-
|
64 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
65 |
</div>
|
66 |
</div>
|
67 |
-
</div>
|
68 |
<?php endif; ?>
|
69 |
|
70 |
<?php if ( ! empty( $boxes ) ) : ?>
|
71 |
-
|
72 |
-
|
73 |
-
|
74 |
-
|
75 |
-
|
76 |
<?php foreach ( $boxes as $box ) : ?>
|
77 |
<div class="ga-box">
|
78 |
<div class="ga-panel ga-panel-default">
|
79 |
<div class="ga-panel-body ga-box-centered">
|
80 |
<div class="ga-box-label"><?php echo esc_html( $box['label'] ); ?></div>
|
81 |
<div class="ga-box-diff" style="color: <?php echo esc_attr( $box['color'] ); ?>;">
|
82 |
-
<?php echo Ga_Helper::format_percent( $box['diff'] ); ?>
|
83 |
</div>
|
84 |
-
<div class="ga-box-comparison"><?php echo $box['comparison']; ?></div>
|
85 |
</div>
|
86 |
</div>
|
87 |
</div>
|
88 |
<?php endforeach; ?>
|
|
|
89 |
</div>
|
90 |
</div>
|
91 |
-
|
92 |
-
<?php
|
93 |
endif;
|
94 |
|
95 |
-
|
96 |
|
97 |
-
if ( ! empty( $sources ) ) :
|
98 |
-
|
99 |
-
|
100 |
-
|
|
|
|
|
101 |
</a>
|
102 |
-
<a href="<?php echo get_admin_url('', 'admin.php?page=googleanalytics&ts')
|
103 |
-
|
|
|
104 |
</a>
|
105 |
</div>
|
106 |
<div class="ga-panel ga-panel-default">
|
107 |
-
<div class="ga-panel-heading"
|
|
|
108 |
</div>
|
109 |
<div class="ga-panel-body">
|
110 |
|
@@ -114,7 +157,7 @@ $days_in_english = Ga_Helper::getPeriodInDaysWords($date_range['from'], $date_ra
|
|
114 |
<td colspan="2">
|
115 |
</td>
|
116 |
<th style="text-align: right;">
|
117 |
-
<?php
|
118 |
</th>
|
119 |
<th style="text-align: right;">
|
120 |
<?php echo '%'; ?>
|
@@ -123,47 +166,85 @@ $days_in_english = Ga_Helper::getPeriodInDaysWords($date_range['from'], $date_ra
|
|
123 |
<tr>
|
124 |
<td colspan="2"></td>
|
125 |
<td class="ga-col-pageviews" style="text-align: right">
|
126 |
-
<div style="font-size: 16px;"><?php echo $sources['total'] ?></div>
|
127 |
<div style="color: grey; font-size: 10px;">% of
|
128 |
-
Total:
|
129 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
130 |
?>
|
131 |
-
(<?php echo $sources['sum'] ?>)
|
132 |
</div>
|
133 |
</td>
|
134 |
<td class="ga-col-progressbar" style="text-align: right">
|
135 |
-
<div style="font-size: 16px;"><?php echo $sources['total'] ?></div>
|
136 |
<div style="color: grey; font-size: 10px;">% of
|
137 |
-
Total:
|
138 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
139 |
?>
|
140 |
-
(<?php echo $sources['sum'] ?>)
|
141 |
</div>
|
142 |
</td>
|
143 |
</tr>
|
144 |
-
<?php foreach ( $sources['rows'] as $key => $source ): ?>
|
145 |
<tr>
|
146 |
-
<td style="width: 5%;text-align: right"><?php echo $key ?>.</td>
|
147 |
<td class="ga-col-name">
|
148 |
-
<?php
|
149 |
-
|
150 |
-
$single_breakdown =
|
151 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
152 |
?>
|
153 |
-
|
154 |
-
|
155 |
-
<?php else: ?>
|
156 |
-
<?php echo $source['name'] ?>
|
157 |
<?php endif; ?>
|
158 |
</td>
|
159 |
-
<td style="text-align: right"><?php echo $source['number'] ?></td>
|
160 |
<td>
|
161 |
<div class="progress">
|
162 |
<div class="progress-bar" role="progressbar"
|
163 |
-
|
164 |
-
|
165 |
-
|
166 |
-
<span style="margin-left: 10px;"
|
|
|
|
|
167 |
</div>
|
168 |
</td>
|
169 |
</tr>
|
@@ -171,85 +252,98 @@ $days_in_english = Ga_Helper::getPeriodInDaysWords($date_range['from'], $date_ra
|
|
171 |
</table>
|
172 |
</div>
|
173 |
<a href="<?php echo esc_url( $source_page_url ); ?>/" class="view-report" target="_blank">
|
174 |
-
<?php echo esc_html__('View Full Report' ); ?>
|
175 |
</a>
|
176 |
</div>
|
177 |
</div>
|
178 |
<?php endif; ?>
|
179 |
|
180 |
-
<?php
|
|
|
181 |
?>
|
182 |
<script type="text/javascript">
|
183 |
|
184 |
-
ga_charts.init(function
|
185 |
|
186 |
var data = new google.visualization.DataTable();
|
187 |
var demoGenderData = new google.visualization.DataTable();
|
188 |
var demoAgeData = new google.visualization.DataTable();
|
189 |
|
190 |
-
data.addColumn('string', '<?php echo esc_js( __( 'Day', 'googleanalytics' ) ); ?>');
|
191 |
-
data.addColumn('number', '<?php echo esc_js( __( 'Pageviews', 'googleanalytics' ) ); ?>');
|
192 |
-
data.addColumn({type: 'string', role: 'tooltip', 'p': {'html': true}});
|
193 |
|
194 |
<?php foreach ( $chart as $row ) : ?>
|
195 |
-
data.addRow(
|
|
|
|
|
|
|
|
|
|
|
|
|
196 |
<?php endforeach; ?>
|
197 |
-
ga_charts.events(data);
|
198 |
-
ga_charts.drawChart(data);
|
199 |
ga_loader.hide();
|
200 |
|
201 |
// Demographic gender chart
|
202 |
<?php
|
203 |
-
$
|
|
|
204 |
$x = 1;
|
205 |
-
foreach ( $gender_chart as $
|
206 |
-
$
|
207 |
-
$x++;
|
208 |
-
}
|
|
|
209 |
|
210 |
-
ga_charts.drawDemoGenderChart(<?php echo
|
211 |
ga_loader.hide();
|
212 |
|
213 |
// Demographic age chart
|
214 |
<?php
|
215 |
-
$
|
|
|
216 |
$x = 1;
|
217 |
-
|
218 |
-
|
219 |
-
$x
|
220 |
-
|
221 |
-
|
|
|
|
|
222 |
|
223 |
// Device chart.
|
224 |
-
|
225 |
-
|
226 |
-
|
227 |
-
|
228 |
-
|
229 |
-
|
230 |
-
|
231 |
-
|
232 |
-
|
233 |
-
|
234 |
-
|
235 |
-
|
236 |
-
|
237 |
-
|
238 |
|
239 |
ga_loader.hide();
|
240 |
|
241 |
-
<?php if (Ga_Helper::are_features_enabled() && !empty($send_data) &&
|
242 |
-
|
243 |
-
|
244 |
-
update_option('googleanalytics_demo_date',
|
245 |
-
update_option('googleanalytics_send_data',
|
246 |
endif;
|
247 |
?>
|
248 |
-
}
|
249 |
);
|
250 |
</script>
|
251 |
-
|
252 |
-
|
|
|
253 |
?>
|
254 |
|
255 |
</div>
|
1 |
<?php
|
2 |
+
/**
|
3 |
+
* Stats view.
|
4 |
+
*
|
5 |
+
* @package GoogleAnalytics
|
6 |
+
*/
|
7 |
+
|
8 |
+
// Variables passed in (with fallbacks in case they aren't).
|
9 |
+
$age_chart = true === isset( $age_chart ) ? $age_chart : array();
|
10 |
+
$gender_chart = true === isset( $gender_chart ) ? $gender_chart : array();
|
11 |
+
|
12 |
+
$account_data = json_decode( get_option( 'googleanalytics_account_data', true ), true );
|
13 |
+
$selected_data = json_decode( get_option( 'googleanalytics_selected_account', true ), true );
|
14 |
|
15 |
foreach ( $account_data as $properties ) {
|
16 |
if ( $properties['id'] === $selected_data[0] ) {
|
22 |
}
|
23 |
}
|
24 |
|
25 |
+
$demo_enabled = get_option( 'googleanalytics_demographic' );
|
26 |
+
$demo_enabled = false === empty( $demo_enabled );
|
27 |
+
|
28 |
+
$ts = filter_input( INPUT_GET, 'ts', FILTER_SANITIZE_STRING );
|
29 |
+
$selected_page = false === empty( $ts ) ? '' : 'selected';
|
30 |
+
$selected_source = false === empty( $ts ) ? 'selected' : '';
|
31 |
+
|
32 |
+
$report_url = 'https://analytics.google.com/analytics/web/#/report/content-pages/a' . $selected_data[0] . 'w' . $internal_prop . 'p' . $selected_data[2];
|
33 |
+
$source_page_url = false === empty( $ts ) ? str_replace(
|
34 |
+
'content-pages',
|
35 |
+
'trafficsources-all-traffic',
|
36 |
+
$report_url
|
37 |
+
) : $report_url;
|
38 |
+
$demographic_page_url = str_replace( 'content-pages', 'visitors-demographics-overview', $report_url );
|
39 |
+
$type_label = false === empty( $ts ) ? 'Traffic Sources' : 'Pages/Posts';
|
40 |
+
$source_url = 'admin.php?page=googleanalytics&ts=1';
|
41 |
+
$send_data = get_option( 'googleanalytics_send_data' );
|
42 |
+
$need_account_demo_enable = array() === $gender_chart && array() === $age_chart;
|
43 |
|
44 |
// Filter GA Action.
|
45 |
$ga_action = filter_input( INPUT_GET, 'ga_action', FILTER_SANITIZE_STRING );
|
46 |
|
47 |
+
$date_range = Ga_Helper::get_date_range_from_request();
|
48 |
|
49 |
+
$days_in_english = Ga_Helper::get_period_in_days_words( $date_range['from'], $date_range['to'] );
|
50 |
?>
|
51 |
+
<?php
|
52 |
+
if ( false === $demo_enabled ) {
|
53 |
+
echo wp_kses(
|
54 |
+
Ga_Helper::ga_wp_notice(
|
55 |
+
__( 'Visualize gender and age data with our new demographic feature.' ),
|
56 |
+
'warning',
|
57 |
+
false,
|
58 |
+
array(
|
59 |
+
'url' => Ga_Helper::create_url(
|
60 |
+
Ga_Helper::get_current_url(),
|
61 |
+
array( Ga_Controller_Core::ACTION_PARAM_NAME => 'demo-ad' )
|
62 |
+
),
|
63 |
+
'label' => __( 'Access Now', 'googleanalytics' ),
|
64 |
+
)
|
65 |
+
),
|
66 |
+
array(
|
67 |
+
'button' => array(
|
68 |
+
'class' => array(),
|
69 |
+
'onclick' => array(),
|
70 |
+
),
|
71 |
+
'div' => array(
|
72 |
+
'class' => array(),
|
73 |
+
),
|
74 |
+
'p' => array(),
|
75 |
+
)
|
76 |
);
|
77 |
+
}
|
78 |
+
?>
|
79 |
+
<div class="wrap ga-wrap" id="ga-stats-container" data-scroll="<?php echo esc_attr( $ga_action ); ?>">
|
80 |
+
<?php if ( false === empty( $chart ) ) : ?>
|
81 |
+
<div class="filter-choices">
|
82 |
+
<div>
|
83 |
+
<?php
|
84 |
+
Ga_Template::load(
|
85 |
+
'templates/date-custom-range-filter',
|
86 |
+
array(
|
87 |
+
'date_from' => $date_range['from'],
|
88 |
+
'date_to' => $date_range['to'],
|
89 |
+
)
|
90 |
+
);
|
91 |
+
?>
|
92 |
+
</div>
|
93 |
</div>
|
94 |
+
<div class="ga-panel ga-panel-default">
|
95 |
+
<div class="ga-panel-heading">
|
96 |
+
<strong>
|
97 |
+
<?php echo esc_html( 'Pageviews - ' . $days_in_english ); ?>
|
98 |
+
</strong>
|
99 |
+
</div>
|
100 |
+
<div class="ga-panel-body ga-chart">
|
101 |
+
<div id="chart_div" style="width: 100%;"></div>
|
102 |
+
<div class="ga-loader-wrapper stats-page">
|
103 |
+
<div class="ga-loader stats-page-loader"></div>
|
104 |
+
</div>
|
105 |
</div>
|
106 |
</div>
|
|
|
107 |
<?php endif; ?>
|
108 |
|
109 |
<?php if ( ! empty( $boxes ) ) : ?>
|
110 |
+
<div class="ga-panel ga-panel-default">
|
111 |
+
<div class="ga-panel-heading"><strong><?php echo esc_html( 'Comparison - ' . $days_in_english ); ?></strong>
|
112 |
+
</div>
|
113 |
+
<div class="ga-panel-body">
|
114 |
+
<div class="ga-row">
|
115 |
<?php foreach ( $boxes as $box ) : ?>
|
116 |
<div class="ga-box">
|
117 |
<div class="ga-panel ga-panel-default">
|
118 |
<div class="ga-panel-body ga-box-centered">
|
119 |
<div class="ga-box-label"><?php echo esc_html( $box['label'] ); ?></div>
|
120 |
<div class="ga-box-diff" style="color: <?php echo esc_attr( $box['color'] ); ?>;">
|
121 |
+
<?php echo esc_html( Ga_Helper::format_percent( $box['diff'] ) ); ?>
|
122 |
</div>
|
123 |
+
<div class="ga-box-comparison"><?php echo esc_html( $box['comparison'] ); ?></div>
|
124 |
</div>
|
125 |
</div>
|
126 |
</div>
|
127 |
<?php endforeach; ?>
|
128 |
+
</div>
|
129 |
</div>
|
130 |
</div>
|
131 |
+
<?php
|
|
|
132 |
endif;
|
133 |
|
134 |
+
require plugin_dir_path( __FILE__ ) . '/templates/demographic-chart.php';
|
135 |
|
136 |
+
if ( ! empty( $sources ) ) :
|
137 |
+
?>
|
138 |
+
<div class="filter-choices" id="traffic-sources">
|
139 |
+
<a href="<?php echo esc_url( get_admin_url( '', 'admin.php?page=googleanalytics#traffic-sources' ) ); ?>"
|
140 |
+
class="<?php echo esc_attr( $selected_page ); ?>">
|
141 |
+
<?php esc_html_e( 'Page View', 'googleanalytics' ); ?>
|
142 |
</a>
|
143 |
+
<a href="<?php echo esc_url( get_admin_url( '', 'admin.php?page=googleanalytics&ts=1#traffic-sources' ) ); ?>"
|
144 |
+
class="<?php echo esc_attr( $selected_source ); ?>">
|
145 |
+
<?php esc_html_e( 'Traffic Source', 'googleanalytics' ); ?>
|
146 |
</a>
|
147 |
</div>
|
148 |
<div class="ga-panel ga-panel-default">
|
149 |
+
<div class="ga-panel-heading">
|
150 |
+
<strong><?php echo esc_html( 'Top 10 ' . $type_label . ' by page views' ); ?></strong>
|
151 |
</div>
|
152 |
<div class="ga-panel-body">
|
153 |
|
157 |
<td colspan="2">
|
158 |
</td>
|
159 |
<th style="text-align: right;">
|
160 |
+
<?php echo esc_html( 'Pageviews' ); ?>
|
161 |
</th>
|
162 |
<th style="text-align: right;">
|
163 |
<?php echo '%'; ?>
|
166 |
<tr>
|
167 |
<td colspan="2"></td>
|
168 |
<td class="ga-col-pageviews" style="text-align: right">
|
169 |
+
<div style="font-size: 16px;"><?php echo esc_html( $sources['total'] ); ?></div>
|
170 |
<div style="color: grey; font-size: 10px;">% of
|
171 |
+
Total:
|
172 |
+
<?php
|
173 |
+
echo esc_html(
|
174 |
+
Ga_Helper::format_percent(
|
175 |
+
( false === empty( $sources['total'] ) ) ? number_format(
|
176 |
+
$sources['sum'] / $sources['total'] * 100,
|
177 |
+
2,
|
178 |
+
'.',
|
179 |
+
' '
|
180 |
+
) : 100
|
181 |
+
)
|
182 |
+
);
|
183 |
?>
|
184 |
+
(<?php echo esc_html( $sources['sum'] ); ?>)
|
185 |
</div>
|
186 |
</td>
|
187 |
<td class="ga-col-progressbar" style="text-align: right">
|
188 |
+
<div style="font-size: 16px;"><?php echo esc_html( $sources['total'] ); ?></div>
|
189 |
<div style="color: grey; font-size: 10px;">% of
|
190 |
+
Total:
|
191 |
+
<?php
|
192 |
+
echo esc_html(
|
193 |
+
Ga_Helper::format_percent(
|
194 |
+
( false === empty( $sources['total'] ) ) ? number_format(
|
195 |
+
$sources['sum'] / $sources['total'] * 100,
|
196 |
+
2,
|
197 |
+
'.',
|
198 |
+
' '
|
199 |
+
) : 100
|
200 |
+
)
|
201 |
+
);
|
202 |
?>
|
203 |
+
(<?php echo esc_html( $sources['sum'] ); ?>)
|
204 |
</div>
|
205 |
</td>
|
206 |
</tr>
|
207 |
+
<?php foreach ( $sources['rows'] as $key => $source ) : ?>
|
208 |
<tr>
|
209 |
+
<td style="width: 5%;text-align: right"><?php echo esc_html( $key ); ?>.</td>
|
210 |
<td class="ga-col-name">
|
211 |
+
<?php
|
212 |
+
if ( '(direct) / (none)' !== $source['name'] ) :
|
213 |
+
$single_breakdown = false === empty( $ts ) ?
|
214 |
+
'/explorer-table.plotKeys=%5B%5D&_r.drilldown=analytics.sourceMedium:' :
|
215 |
+
'/explorer-table.plotKeys=%5B%5D&_r.drilldown=analytics.pagePath:';
|
216 |
+
?>
|
217 |
+
<a class="ga-source-name"
|
218 |
+
href="
|
219 |
+
<?php
|
220 |
+
echo esc_url(
|
221 |
+
$source_page_url . $single_breakdown . str_replace(
|
222 |
+
'+',
|
223 |
+
'%20',
|
224 |
+
str_replace(
|
225 |
+
'2F',
|
226 |
+
'~2F',
|
227 |
+
str_replace( '%', '', rawurlencode( $source['url'] ) )
|
228 |
+
)
|
229 |
+
)
|
230 |
+
);
|
231 |
?>
|
232 |
+
/"
|
233 |
+
target="_blank"><?php echo esc_html( $source['name'] ); ?></a>
|
234 |
+
<?php else : ?>
|
235 |
+
<?php echo esc_html( $source['name'] ); ?>
|
236 |
<?php endif; ?>
|
237 |
</td>
|
238 |
+
<td style="text-align: right"><?php echo esc_html( $source['number'] ); ?></td>
|
239 |
<td>
|
240 |
<div class="progress">
|
241 |
<div class="progress-bar" role="progressbar"
|
242 |
+
aria-valuenow="<?php echo esc_attr( $source['percent'] ); ?>" aria-valuemin="0"
|
243 |
+
aria-valuemax="100"
|
244 |
+
style="width: <?php echo esc_attr( $source['percent'] ); ?>%;"></div>
|
245 |
+
<span style="margin-left: 10px;">
|
246 |
+
<?php echo esc_html( Ga_Helper::format_percent( $source['percent'] ) ); ?>
|
247 |
+
</span>
|
248 |
</div>
|
249 |
</td>
|
250 |
</tr>
|
252 |
</table>
|
253 |
</div>
|
254 |
<a href="<?php echo esc_url( $source_page_url ); ?>/" class="view-report" target="_blank">
|
255 |
+
<?php echo esc_html__( 'View Full Report' ); ?>
|
256 |
</a>
|
257 |
</div>
|
258 |
</div>
|
259 |
<?php endif; ?>
|
260 |
|
261 |
+
<?php
|
262 |
+
if ( ! empty( $chart ) ) :
|
263 |
?>
|
264 |
<script type="text/javascript">
|
265 |
|
266 |
+
ga_charts.init( function() {
|
267 |
|
268 |
var data = new google.visualization.DataTable();
|
269 |
var demoGenderData = new google.visualization.DataTable();
|
270 |
var demoAgeData = new google.visualization.DataTable();
|
271 |
|
272 |
+
data.addColumn( 'string', '<?php echo esc_js( __( 'Day', 'googleanalytics' ) ); ?>' );
|
273 |
+
data.addColumn( 'number', '<?php echo esc_js( __( 'Pageviews', 'googleanalytics' ) ); ?>' );
|
274 |
+
data.addColumn( { type: 'string', role: 'tooltip', 'p': { 'html': true } } );
|
275 |
|
276 |
<?php foreach ( $chart as $row ) : ?>
|
277 |
+
data.addRow( [
|
278 |
+
'<?php echo esc_js( $row['day'] ); ?>',
|
279 |
+
<?php echo esc_js( $row['current'] ); ?>,
|
280 |
+
ga_charts.createTooltip( '<?php echo esc_js( $row['day'] ); ?>',
|
281 |
+
'<?php echo esc_js( $row['current'] ); ?>'
|
282 |
+
)
|
283 |
+
] );
|
284 |
<?php endforeach; ?>
|
285 |
+
ga_charts.events( data );
|
286 |
+
ga_charts.drawChart( data );
|
287 |
ga_loader.hide();
|
288 |
|
289 |
// Demographic gender chart
|
290 |
<?php
|
291 |
+
$demo_gender_data[0] = array( 'Gender', 'The gender of visitors' );
|
292 |
+
|
293 |
$x = 1;
|
294 |
+
foreach ( $gender_chart as $gender_type => $amount ) {
|
295 |
+
$demo_gender_data[ $x ] = array( ucfirst( $gender_type ), intval( $amount ) );
|
296 |
+
$x ++;
|
297 |
+
}
|
298 |
+
?>
|
299 |
|
300 |
+
ga_charts.drawDemoGenderChart(<?php echo wp_json_encode( $demo_gender_data ); ?>);
|
301 |
ga_loader.hide();
|
302 |
|
303 |
// Demographic age chart
|
304 |
<?php
|
305 |
+
$demo_age_data[0] = array( 'Age', 'Average age range of visitors' );
|
306 |
+
|
307 |
$x = 1;
|
308 |
+
|
309 |
+
foreach ( $age_chart as $age_type => $amount ) {
|
310 |
+
$demo_age_data[ $x ] = array( $age_type, intval( $amount ) );
|
311 |
+
$x ++;
|
312 |
+
}
|
313 |
+
?>
|
314 |
+
ga_charts.drawDemoAgeChart(<?php echo wp_json_encode( $demo_age_data ); ?>);
|
315 |
|
316 |
// Device chart.
|
317 |
+
<?php
|
318 |
+
$demo_device_data = array();
|
319 |
+
$demo_device_data[0] = array(
|
320 |
+
__( 'Device', 'googleanalytics' ),
|
321 |
+
__( 'Device Breakdown', 'googleanalytics' ),
|
322 |
+
);
|
323 |
+
|
324 |
+
$x = 1;
|
325 |
+
foreach ( $device_chart as $age_type => $amount ) {
|
326 |
+
$demo_device_data[ $x ] = array( $age_type, intval( $amount ) );
|
327 |
+
$x ++;
|
328 |
+
}
|
329 |
+
?>
|
330 |
+
ga_charts.drawDemoDeviceChart(<?php echo wp_json_encode( $demo_device_data ); ?>);
|
331 |
|
332 |
ga_loader.hide();
|
333 |
|
334 |
+
<?php if ( Ga_Helper::are_features_enabled() && ! empty( $send_data ) && 'true' === $send_data ) : ?>
|
335 |
+
ga_events.sendDemoData(<?php echo esc_js( get_option( 'googleanalytics_demo_data' ) ); ?>);
|
336 |
+
<?php
|
337 |
+
update_option( 'googleanalytics_demo_date', gmdate( 'Y-m-d' ) );
|
338 |
+
update_option( 'googleanalytics_send_data', 'false' );
|
339 |
endif;
|
340 |
?>
|
341 |
+
},
|
342 |
);
|
343 |
</script>
|
344 |
+
<?php
|
345 |
+
endif;
|
346 |
+
require 'templates/demo-popup.php';
|
347 |
?>
|
348 |
|
349 |
</div>
|
view/templates/appearance.php
CHANGED
@@ -1,14 +1,22 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
<div class="col-md-12">
|
2 |
<h3><?php echo esc_html__( 'Form Color', 'googleanalytics' ); ?></h3>
|
3 |
</div>
|
4 |
|
5 |
<div id="sharethis-form-color" class="col-md-12">
|
6 |
-
<?php foreach ($colors as $color) : ?>
|
7 |
-
<div class="color<?php echo isset($gdpr_config['color']) && $color === $gdpr_config['color'] ? ' selected' : ''; ?>"
|
8 |
-
|
9 |
-
|
10 |
>
|
11 |
-
<span style="content: ' '; background-color:<?php echo
|
12 |
</div>
|
13 |
<?php endforeach; ?>
|
14 |
</div>
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Appearance view.
|
4 |
+
*
|
5 |
+
* @package GoogleAnalytics
|
6 |
+
*/
|
7 |
+
|
8 |
+
?>
|
9 |
<div class="col-md-12">
|
10 |
<h3><?php echo esc_html__( 'Form Color', 'googleanalytics' ); ?></h3>
|
11 |
</div>
|
12 |
|
13 |
<div id="sharethis-form-color" class="col-md-12">
|
14 |
+
<?php foreach ( $colors as $color ) : ?>
|
15 |
+
<div class="color<?php echo esc_attr( isset( $gdpr_config['color'] ) && $color === $gdpr_config['color'] ? ' selected' : '' ); ?>"
|
16 |
+
data-value="<?php echo esc_attr( $color ); ?>"
|
17 |
+
style="max-width: 30px; max-height: 30px; overflow: hidden;"
|
18 |
>
|
19 |
+
<span style="content: ' '; background-color:<?php echo esc_attr( $color ); ?>; padding: 40px;"></span>
|
20 |
</div>
|
21 |
<?php endforeach; ?>
|
22 |
</div>
|
view/templates/date-custom-range-filter.php
ADDED
@@ -0,0 +1,32 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Custom Date Range Filter template.
|
4 |
+
*
|
5 |
+
* @package GoogleAnalytics
|
6 |
+
*/
|
7 |
+
|
8 |
+
$args = isset( $args ) ? $args : array();
|
9 |
+
|
10 |
+
$props = wp_parse_args(
|
11 |
+
$args,
|
12 |
+
array(
|
13 |
+
'date_from' => gmdate( 'Y-m-d', strtotime( '-1 week' ) ),
|
14 |
+
'date_to' => gmdate( 'Y-m-d' ),
|
15 |
+
)
|
16 |
+
);
|
17 |
+
|
18 |
+
$date_from = false === empty( $props['date_from'] ) ? $props['date_from'] : gmdate( 'Y-m-d', strtotime( '-1 week' ) );
|
19 |
+
$date_to = false === empty( $props['date_to'] ) ? $props['date_to'] : gmdate( 'Y-m-d' );
|
20 |
+
?>
|
21 |
+
<form action="<?php echo esc_url( admin_url( 'admin.php' ) ); ?>" method="GET">
|
22 |
+
<input type="hidden" name="page" value="googleanalytics"/>
|
23 |
+
<label>
|
24 |
+
<?php esc_html_e( 'From:', 'googleanalytics' ); ?>
|
25 |
+
<input name="date_from" type="date" value="<?php echo esc_attr( $date_from ); ?>">
|
26 |
+
</label>
|
27 |
+
<label>
|
28 |
+
<?php esc_html_e( 'To:', 'googleanalytics' ); ?>
|
29 |
+
<input name="date_to" type="date" value="<?php echo esc_attr( $date_to ); ?>">
|
30 |
+
</label>
|
31 |
+
<button><?php esc_html_e( 'Filter', 'googleanalytics' ); ?></button>
|
32 |
+
</form>
|
view/templates/date_custom_range_filter.php
DELETED
@@ -1,26 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
/**
|
3 |
-
* Custom Date Range Filter template.
|
4 |
-
*/
|
5 |
-
$args = isset($args) ? $args : [];
|
6 |
-
|
7 |
-
$props = wp_parse_args($args, [
|
8 |
-
'date_from' => date('Y-m-d', strtotime('-1 week')),
|
9 |
-
'date_to' => date('Y-m-d'),
|
10 |
-
]);
|
11 |
-
|
12 |
-
$date_from = false === empty($props['date_from']) ? $props['date_from'] : date('Y-m-d', strtotime('-1 week'));
|
13 |
-
$date_to = false === empty($props['date_to']) ? $props['date_to'] : date('Y-m-d');
|
14 |
-
?>
|
15 |
-
<form action="<?php echo esc_url(admin_url('admin.php')); ?>" method="GET">
|
16 |
-
<input type="hidden" name="page" value="googleanalytics"/>
|
17 |
-
<label>
|
18 |
-
<?php esc_html_e('From:', 'googleanalytics'); ?>
|
19 |
-
<input name="date_from" type="date" value="<?php echo esc_attr($date_from); ?>">
|
20 |
-
</label>
|
21 |
-
<label>
|
22 |
-
<?php esc_html_e('To:', 'googleanalytics'); ?>
|
23 |
-
<input name="date_to" type="date" value="<?php echo esc_attr($date_to); ?>">
|
24 |
-
</label>
|
25 |
-
<button><?php esc_html_e('Filter', 'googleanalytics'); ?></button>
|
26 |
-
</form>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
view/templates/demo-popup.php
CHANGED
@@ -1,16 +1,24 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
<div class="demo-enable-popup">
|
2 |
<p>
|
3 |
We are deploying additional data from your Google Analytics account to your WordPress dashboard
|
4 |
as a free service to assist you in operating your WordPress site.
|
5 |
This will result in Google Analytics having access to data collected from Your site(s)
|
6 |
and subject to Google’s privacy policies as described in the <a
|
7 |
-
href="
|
8 |
We will also use the aggregate demographic data related to your site for analytic purposes.
|
9 |
We will not sell or transfer any of the demographic data relating to your site to any other party.
|
10 |
For more information, please visit the <a
|
11 |
-
href="
|
12 |
target="_blank">ShareThis Privacy Policy</a> and <a
|
13 |
-
href="
|
14 |
</p>
|
15 |
<button id="enable-demographic">I accept</button>
|
16 |
<button class="close-demo-modal">Decline</button>
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Demo popup view.
|
4 |
+
*
|
5 |
+
* @package GoogleAnalytics
|
6 |
+
*/
|
7 |
+
|
8 |
+
?>
|
9 |
<div class="demo-enable-popup">
|
10 |
<p>
|
11 |
We are deploying additional data from your Google Analytics account to your WordPress dashboard
|
12 |
as a free service to assist you in operating your WordPress site.
|
13 |
This will result in Google Analytics having access to data collected from Your site(s)
|
14 |
and subject to Google’s privacy policies as described in the <a
|
15 |
+
href="https://www.sharethis.com/publisher-terms-of-use/" target="_blank">ShareThis Publisher TOU</a>.
|
16 |
We will also use the aggregate demographic data related to your site for analytic purposes.
|
17 |
We will not sell or transfer any of the demographic data relating to your site to any other party.
|
18 |
For more information, please visit the <a
|
19 |
+
href="https://sharethis.com/privacy/"
|
20 |
target="_blank">ShareThis Privacy Policy</a> and <a
|
21 |
+
href="https://www.sharethis.com/publisher-terms-of-use/" target="_blank">Publisher TOU</a>.
|
22 |
</p>
|
23 |
<button id="enable-demographic">I accept</button>
|
24 |
<button class="close-demo-modal">Decline</button>
|
view/templates/demographic-chart.php
CHANGED
@@ -1,49 +1,76 @@
|
|
1 |
-
<?php
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2 |
<div class="demo-ad ga-panel ga-panel-default">
|
3 |
<div class="ga-panel-heading">
|
4 |
<strong>
|
5 |
-
<?php esc_html_e('Get Demographic Data!'); ?>
|
6 |
<button id="demographic-popup">
|
7 |
-
<?php esc_html_e('Click Here To Enable', 'googleanalytics'); ?>
|
8 |
</button>
|
9 |
</strong>
|
10 |
</div>
|
11 |
-
<img src="<?php echo trailingslashit(get_home_url()) . 'wp-content/plugins/googleanalytics/assets/images/demographics-ad.png'; ?>"/>
|
12 |
</div>
|
13 |
-
<?php elseif ($need_account_demo_enable) : ?>
|
14 |
-
|
15 |
-
|
16 |
-
|
17 |
-
|
18 |
-
|
19 |
-
|
20 |
-
|
21 |
-
|
22 |
-
|
23 |
-
|
24 |
-
|
25 |
-
|
26 |
-
|
27 |
-
|
28 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
29 |
|
30 |
-
|
31 |
-
|
32 |
-
|
33 |
-
|
34 |
-
|
35 |
-
|
36 |
-
<?php else: ?>
|
37 |
<div class="filter-choices">
|
38 |
-
<?php
|
39 |
-
|
40 |
-
'
|
41 |
-
|
|
|
|
|
|
|
|
|
|
|
42 |
</div>
|
43 |
<div class="demo-ad ga-panel ga-panel-default">
|
44 |
<div class="ga-panel-heading">
|
45 |
<strong>
|
46 |
-
<?php esc_html_e('Demographic by sessions'); ?>
|
47 |
</strong>
|
48 |
</div>
|
49 |
<div class="ga-demo-chart">
|
@@ -60,18 +87,18 @@
|
|
60 |
</div>
|
61 |
</div>
|
62 |
</div>
|
63 |
-
|
64 |
-
|
65 |
-
|
66 |
-
|
67 |
-
|
68 |
-
|
69 |
-
|
70 |
-
|
71 |
</div>
|
72 |
<a href="<?php echo esc_url( $demographic_page_url ); ?>/" class="view-report" target="_blank">
|
73 |
-
<?php
|
74 |
</a>
|
75 |
<hr>
|
76 |
-
<?php
|
77 |
endif;
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Demographic Chart view.
|
4 |
+
*
|
5 |
+
* @package GoogleAnalytics
|
6 |
+
*/
|
7 |
+
|
8 |
+
?>
|
9 |
+
<?php if ( false === $demo_enabled ) : ?>
|
10 |
<div class="demo-ad ga-panel ga-panel-default">
|
11 |
<div class="ga-panel-heading">
|
12 |
<strong>
|
13 |
+
<?php esc_html_e( 'Get Demographic Data!', 'googleanalytics' ); ?>
|
14 |
<button id="demographic-popup">
|
15 |
+
<?php esc_html_e( 'Click Here To Enable', 'googleanalytics' ); ?>
|
16 |
</button>
|
17 |
</strong>
|
18 |
</div>
|
19 |
+
<img src="<?php echo esc_url( trailingslashit( get_home_url() ) . 'wp-content/plugins/googleanalytics/assets/images/demographics-ad.png' ); ?>"/>
|
20 |
</div>
|
21 |
+
<?php elseif ( false === empty( $need_account_demo_enable ) ) : ?>
|
22 |
+
<div class="demo-ad ga-panel ga-panel-default">
|
23 |
+
<div class="ga-panel-heading">
|
24 |
+
<strong>
|
25 |
+
<?php
|
26 |
+
esc_html_e(
|
27 |
+
"If no demographics data is shown, you'll most likely need to do one of the following:",
|
28 |
+
'googleanalytics'
|
29 |
+
);
|
30 |
+
?>
|
31 |
+
<br>
|
32 |
+
<ol>
|
33 |
+
<li><?php esc_html_e( 'Enable "Demographics" within Google Analytics.', 'googleanalytics' ); ?></li>
|
34 |
+
<li>
|
35 |
+
<?php
|
36 |
+
esc_html_e(
|
37 |
+
'If you just enabled this feature, it may require a refresh prior to seeing data.',
|
38 |
+
'googleanalytics'
|
39 |
+
);
|
40 |
+
?>
|
41 |
+
</li>
|
42 |
+
<li>
|
43 |
+
<?php
|
44 |
+
esc_html_e(
|
45 |
+
'Wait until there\'s sufficient Demographic data to display.',
|
46 |
+
'googleanalytics'
|
47 |
+
);
|
48 |
+
?>
|
49 |
+
</li>
|
50 |
+
</ol>
|
51 |
|
52 |
+
<a href="<?php echo esc_url( $demographic_page_url ); ?>/" class="view-report" target="_blank">
|
53 |
+
<?php esc_html_e( 'Go to my account', 'googleanalytics' ); ?>
|
54 |
+
</a>
|
55 |
+
</strong>
|
56 |
+
</div>
|
57 |
+
</div>
|
58 |
+
<?php else : ?>
|
59 |
<div class="filter-choices">
|
60 |
+
<?php
|
61 |
+
Ga_Template::load(
|
62 |
+
'templates/date-custom-range-filter',
|
63 |
+
array(
|
64 |
+
'date_from' => $date_range['from'],
|
65 |
+
'date_to' => $date_range['to'],
|
66 |
+
)
|
67 |
+
);
|
68 |
+
?>
|
69 |
</div>
|
70 |
<div class="demo-ad ga-panel ga-panel-default">
|
71 |
<div class="ga-panel-heading">
|
72 |
<strong>
|
73 |
+
<?php esc_html_e( 'Demographic by sessions' ); ?>
|
74 |
</strong>
|
75 |
</div>
|
76 |
<div class="ga-demo-chart">
|
87 |
</div>
|
88 |
</div>
|
89 |
</div>
|
90 |
+
<div class="ga-demo-chart">
|
91 |
+
<div class="ga-panel-body ga-chart device">
|
92 |
+
<div id="demo_chart_device_div" style="width: 100%;"></div>
|
93 |
+
<div class="ga-loader-wrapper stats-page">
|
94 |
+
<div class="ga-loader stats-page-loader"></div>
|
95 |
+
</div>
|
96 |
+
</div>
|
97 |
+
</div>
|
98 |
</div>
|
99 |
<a href="<?php echo esc_url( $demographic_page_url ); ?>/" class="view-report" target="_blank">
|
100 |
+
<?php esc_html_e( 'View Full Report', 'googleanalytics' ); ?>
|
101 |
</a>
|
102 |
<hr>
|
103 |
+
<?php
|
104 |
endif;
|
view/templates/demographic.php
CHANGED
@@ -1,19 +1,25 @@
|
|
1 |
<?php
|
2 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
3 |
?>
|
4 |
-
<?php if ('Enable' === $enabledisable) : ?>
|
5 |
-
<tr
|
6 |
-
<th scope="row"><?php esc_html_e('Enable demographic charts', 'googleanalytics'); ?>:</th>
|
7 |
</tr>
|
8 |
-
<?php if ( Ga_Helper::are_features_enabled() ) : ?>
|
9 |
<td>
|
10 |
-
<button id="demographic-popup"><?php esc_html_e('Enable', 'googleanalytics'); ?></button>
|
11 |
</td>
|
12 |
<?php else : ?>
|
13 |
<td>
|
14 |
-
<label class="<?php echo
|
15 |
-
<button class="gdpr-enable" disabled="disabled"><?php esc_html_e('Enable'); ?></button>
|
16 |
-
<span class="ga-tooltiptext ga-tt-abs"><?php
|
17 |
</label>
|
18 |
</td>
|
19 |
<?php endif; ?>
|
1 |
<?php
|
2 |
+
/**
|
3 |
+
* Demographic view.
|
4 |
+
*
|
5 |
+
* @package GoogleAnalytics
|
6 |
+
*/
|
7 |
+
|
8 |
+
$enabledisable = get_option( 'googleanalytics_demographic' ) === '1' ? 'Disable' : 'Enable';
|
9 |
?>
|
10 |
+
<?php if ( 'Enable' === $enabledisable ) : ?>
|
11 |
+
<tr>
|
12 |
+
<th scope="row"><?php esc_html_e( 'Enable demographic charts', 'googleanalytics' ); ?>:</th>
|
13 |
</tr>
|
14 |
+
<?php if ( true === Ga_Helper::are_features_enabled() ) : ?>
|
15 |
<td>
|
16 |
+
<button id="demographic-popup"><?php esc_html_e( 'Enable', 'googleanalytics' ); ?></button>
|
17 |
</td>
|
18 |
<?php else : ?>
|
19 |
<td>
|
20 |
+
<label class="<?php echo false === Ga_Helper::are_features_enabled() ? 'label-grey ga-tooltip' : ''; ?>">
|
21 |
+
<button class="gdpr-enable" disabled="disabled"><?php esc_html_e( 'Enable' ); ?></button>
|
22 |
+
<span class="ga-tooltiptext ga-tt-abs"><?php echo esc_html( $tooltip ); ?></span>
|
23 |
</label>
|
24 |
</td>
|
25 |
<?php endif; ?>
|
view/templates/exclusions.php
CHANGED
@@ -1,7 +1,10 @@
|
|
1 |
<?php
|
2 |
/**
|
3 |
* Configure tool template for gdpr onboarding
|
|
|
|
|
4 |
*/
|
|
|
5 |
?>
|
6 |
<div class="vendor-exclusion">
|
7 |
<div class="vendor-table">
|
@@ -9,7 +12,7 @@
|
|
9 |
<div class="vendor-table-header">
|
10 |
<div class="vendor-name">
|
11 |
<h3>
|
12 |
-
<?php esc_html_e('Vendor names', 'googleanalytics'); ?>
|
13 |
</h3>
|
14 |
<div class="st-input vendor-search">
|
15 |
<input autocomplete="off" id="vendor-search " placeholder="Search for vendor" type="text">
|
@@ -17,31 +20,33 @@
|
|
17 |
</div>
|
18 |
</div>
|
19 |
<p class="vendor-info">
|
20 |
-
<?php esc_html_e('Manage third-party vendors asking for consent across your sites.', '
|
21 |
</p>
|
22 |
</div>
|
23 |
<div class="vendor-table-body">
|
24 |
-
<?php foreach ($vendors as $vendor ) : ?>
|
25 |
<div class="vendor-table-cell">
|
26 |
-
<a
|
27 |
-
<a
|
28 |
<div class="vendor-table-cell-wrapper switch">
|
29 |
<label>
|
30 |
-
<input data-id="<?php echo esc_attr($vendor['id']); ?>" type="checkbox" name="vendor[<?php echo esc_attr($vendor['id']); ?>]" value="consent" />
|
31 |
<span class="lever"></span>
|
32 |
-
<strong><?php echo esc_html($vendor['name']); ?></strong>
|
33 |
</label>
|
34 |
<div class="vendor-accor">
|
35 |
<p>
|
36 |
-
<strong><?php esc_html_e('Privacy Policy: ', '
|
37 |
-
|
38 |
-
|
|
|
|
|
39 |
</p>
|
40 |
<p>
|
41 |
-
<strong><?php esc_html_e('Purposes: ', '
|
42 |
<div class="vendor-purpose-list">
|
43 |
-
<?php foreach ($vendor['purposes'] as $purpose) : ?>
|
44 |
-
<p><?php echo esc_html($purposes[$purpose]); ?></p>
|
45 |
<?php endforeach; ?>
|
46 |
</div>
|
47 |
</p>
|
1 |
<?php
|
2 |
/**
|
3 |
* Configure tool template for gdpr onboarding
|
4 |
+
*
|
5 |
+
* @package GoogleAnalytics
|
6 |
*/
|
7 |
+
|
8 |
?>
|
9 |
<div class="vendor-exclusion">
|
10 |
<div class="vendor-table">
|
12 |
<div class="vendor-table-header">
|
13 |
<div class="vendor-name">
|
14 |
<h3>
|
15 |
+
<?php esc_html_e( 'Vendor names', 'googleanalytics' ); ?>
|
16 |
</h3>
|
17 |
<div class="st-input vendor-search">
|
18 |
<input autocomplete="off" id="vendor-search " placeholder="Search for vendor" type="text">
|
20 |
</div>
|
21 |
</div>
|
22 |
<p class="vendor-info">
|
23 |
+
<?php esc_html_e( 'Manage third-party vendors asking for consent across your sites.', 'googleanalytics' ); ?>
|
24 |
</p>
|
25 |
</div>
|
26 |
<div class="vendor-table-body">
|
27 |
+
<?php foreach ( $vendors as $vendor ) : ?>
|
28 |
<div class="vendor-table-cell">
|
29 |
+
<a id="<?php echo esc_attr( strtolower( $vendor['name'] ) ); ?>"></a>
|
30 |
+
<a id="<?php echo esc_attr( strtolower( explode( ' ', $vendor['name'] )[0] ) ); ?>"></a>
|
31 |
<div class="vendor-table-cell-wrapper switch">
|
32 |
<label>
|
33 |
+
<input data-id="<?php echo esc_attr( $vendor['id'] ); ?>" type="checkbox" name="vendor[<?php echo esc_attr( $vendor['id'] ); ?>]" value="consent" />
|
34 |
<span class="lever"></span>
|
35 |
+
<strong><?php echo esc_html( $vendor['name'] ); ?></strong>
|
36 |
</label>
|
37 |
<div class="vendor-accor">
|
38 |
<p>
|
39 |
+
<strong><?php esc_html_e( 'Privacy Policy: ', 'googleanalytics' ); ?></strong>
|
40 |
+
<?php
|
41 |
+
echo '<a href="' . esc_url( $vendor['policyUrl'] ) . '" target="_blank">' .
|
42 |
+
esc_html( $vendor['policyUrl'] ) . '</a>';
|
43 |
+
?>
|
44 |
</p>
|
45 |
<p>
|
46 |
+
<strong><?php esc_html_e( 'Purposes: ', 'googleanalytics' ); ?></strong>
|
47 |
<div class="vendor-purpose-list">
|
48 |
+
<?php foreach ( $vendor['purposes'] as $purpose ) : ?>
|
49 |
+
<p><?php echo esc_html( $purposes[ $purpose ] ); ?></p>
|
50 |
<?php endforeach; ?>
|
51 |
</div>
|
52 |
</p>
|
view/templates/gdpr-config.php
CHANGED
@@ -1,10 +1,12 @@
|
|
1 |
<?php
|
2 |
/**
|
3 |
* Appearence display for gdpr config.
|
|
|
|
|
4 |
*/
|
5 |
|
6 |
// Template vars.
|
7 |
-
$colors =
|
8 |
'#e31010',
|
9 |
'#000000',
|
10 |
'#ffffff',
|
@@ -34,29 +36,29 @@ $colors = [
|
|
34 |
'#bedadc',
|
35 |
'#c4def6',
|
36 |
'#bed3f3',
|
37 |
-
'#d4c4fb'
|
38 |
-
|
39 |
|
40 |
|
41 |
// User type options.
|
42 |
$user_types = array(
|
43 |
-
'eu' => esc_html__('Only visitors in the EU', '
|
44 |
-
'always' => esc_html__('All visitors globally', '
|
45 |
);
|
46 |
|
47 |
$languages = array(
|
48 |
-
'English'
|
49 |
-
'German'
|
50 |
-
'Spanish'
|
51 |
-
'French'
|
52 |
);
|
53 |
|
54 |
-
$publisher_name = !empty($gdpr_config['publisher_name']) ? $gdpr_config['publisher_name'] : '';
|
55 |
-
$enabled
|
56 |
?>
|
57 |
<div id="adblocker-notice" class="notice notice-error is-dismissible">
|
58 |
<p>
|
59 |
-
<?php
|
60 |
</p>
|
61 |
</div>
|
62 |
<div id="detectadblock">
|
@@ -67,42 +69,60 @@ $enabled = !empty($gdpr_config['enabled']) ? $gdpr_config['enabled'] : false;
|
|
67 |
<div class="switch">
|
68 |
<div class="purpose-item">
|
69 |
<label class="enable-tool">
|
70 |
-
<?php
|
71 |
-
<input type="checkbox" name="gdpr-enable" <?php echo checked('true', $enabled); ?>/>
|
72 |
<span class="lever"></span>
|
73 |
</label>
|
74 |
</div>
|
75 |
</div>
|
76 |
<div class="well">
|
77 |
<label class="control-label">
|
78 |
-
<?php
|
79 |
-
|
|
|
|
|
|
|
|
|
80 |
</label>
|
81 |
<div class="input-div">
|
82 |
-
<input type="text" id="sharethis-publisher-name" placeholder="Enter your company name" value="<?php echo esc_attr($publisher_name); ?>">
|
83 |
</div>
|
84 |
<label class="control-label">
|
85 |
-
<?php
|
86 |
-
|
|
|
|
|
|
|
|
|
87 |
</label>
|
88 |
<div class="input-div">
|
89 |
<select id="sharethis-user-type">
|
90 |
-
<?php foreach ($user_types as $user_value => $name) : ?>
|
91 |
-
<option value="<?php echo esc_attr($user_value); ?>"
|
92 |
-
<?php
|
|
|
|
|
|
|
|
|
|
|
93 |
</option>
|
94 |
<?php endforeach; ?>
|
95 |
</select>
|
96 |
</div>
|
97 |
|
98 |
<label class="control-label">
|
99 |
-
<?php
|
100 |
</label>
|
101 |
<div class="input-div">
|
102 |
<select id="st-language">
|
103 |
-
<?php foreach ($languages as $language => $code) : ?>
|
104 |
-
<option value="<?php echo esc_attr($code); ?>"
|
105 |
-
<?php
|
|
|
|
|
|
|
|
|
|
|
106 |
</option>
|
107 |
<?php endforeach; ?>
|
108 |
</select>
|
@@ -111,33 +131,33 @@ $enabled = !empty($gdpr_config['enabled']) ? $gdpr_config['enabled'] : false;
|
|
111 |
<div class="accor-wrap">
|
112 |
<div class="accor-tab">
|
113 |
<span class="accor-arrow">►</span>
|
114 |
-
<?php
|
115 |
</div>
|
116 |
<div class="accor-content">
|
117 |
<div class="well">
|
118 |
-
<?php
|
119 |
</div>
|
120 |
</div>
|
121 |
</div>
|
122 |
<div class="accor-wrap">
|
123 |
<div class="accor-tab">
|
124 |
<span class="accor-arrow">►</span>
|
125 |
-
<?php
|
126 |
</div>
|
127 |
<div class="accor-content">
|
128 |
<div class="well">
|
129 |
-
<?php
|
130 |
</div>
|
131 |
</div>
|
132 |
</div>
|
133 |
<div class="accor-wrap">
|
134 |
<div class="accor-tab">
|
135 |
<span class="accor-arrow">►</span>
|
136 |
-
<?php
|
137 |
</div>
|
138 |
<div class="accor-content">
|
139 |
<div class="well">
|
140 |
-
<?php
|
141 |
</div>
|
142 |
</div>
|
143 |
</div>
|
1 |
<?php
|
2 |
/**
|
3 |
* Appearence display for gdpr config.
|
4 |
+
*
|
5 |
+
* @package GoogleAnalytics
|
6 |
*/
|
7 |
|
8 |
// Template vars.
|
9 |
+
$colors = array(
|
10 |
'#e31010',
|
11 |
'#000000',
|
12 |
'#ffffff',
|
36 |
'#bedadc',
|
37 |
'#c4def6',
|
38 |
'#bed3f3',
|
39 |
+
'#d4c4fb',
|
40 |
+
);
|
41 |
|
42 |
|
43 |
// User type options.
|
44 |
$user_types = array(
|
45 |
+
'eu' => esc_html__( 'Only visitors in the EU', 'googleanalytics' ),
|
46 |
+
'always' => esc_html__( 'All visitors globally', 'googleanalytics' ),
|
47 |
);
|
48 |
|
49 |
$languages = array(
|
50 |
+
'English' => 'en',
|
51 |
+
'German' => 'de',
|
52 |
+
'Spanish' => 'es',
|
53 |
+
'French' => 'fr',
|
54 |
);
|
55 |
|
56 |
+
$publisher_name = ! empty( $gdpr_config['publisher_name'] ) ? $gdpr_config['publisher_name'] : '';
|
57 |
+
$enabled = ! empty( $gdpr_config['enabled'] ) ? $gdpr_config['enabled'] : false;
|
58 |
?>
|
59 |
<div id="adblocker-notice" class="notice notice-error is-dismissible">
|
60 |
<p>
|
61 |
+
<?php esc_html_e( 'It appears you have an ad blocker enabled. To avoid affecting this plugin\'s functionality, please disable while using its admin configurations and registrations. Thank you.', 'googleanalytics' ); ?>
|
62 |
</p>
|
63 |
</div>
|
64 |
<div id="detectadblock">
|
69 |
<div class="switch">
|
70 |
<div class="purpose-item">
|
71 |
<label class="enable-tool">
|
72 |
+
<?php esc_html_e( 'Enable GDPR', 'googleanalytics' ); ?>
|
73 |
+
<input type="checkbox" name="gdpr-enable" <?php echo checked( 'true', $enabled ); ?>/>
|
74 |
<span class="lever"></span>
|
75 |
</label>
|
76 |
</div>
|
77 |
</div>
|
78 |
<div class="well">
|
79 |
<label class="control-label">
|
80 |
+
<?php
|
81 |
+
esc_html_e(
|
82 |
+
'PUBLISHER NAME * (this will be displayed in the consent tool)',
|
83 |
+
'googleanalytics'
|
84 |
+
);
|
85 |
+
?>
|
86 |
</label>
|
87 |
<div class="input-div">
|
88 |
+
<input type="text" id="sharethis-publisher-name" placeholder="Enter your company name" value="<?php echo esc_attr( $publisher_name ); ?>">
|
89 |
</div>
|
90 |
<label class="control-label">
|
91 |
+
<?php
|
92 |
+
esc_html_e(
|
93 |
+
'WHICH USERS SHOULD BE ASKED FOR CONSENT?',
|
94 |
+
'googleanalytics'
|
95 |
+
);
|
96 |
+
?>
|
97 |
</label>
|
98 |
<div class="input-div">
|
99 |
<select id="sharethis-user-type">
|
100 |
+
<?php foreach ( $user_types as $user_value => $name ) : ?>
|
101 |
+
<option value="<?php echo esc_attr( $user_value ); ?>"
|
102 |
+
<?php
|
103 |
+
echo true === isset( $gdpr_config['display'] ) ?
|
104 |
+
selected( $user_value, $gdpr_config['display'] ) : '';
|
105 |
+
?>
|
106 |
+
>
|
107 |
+
<?php echo esc_html( $name ); ?>
|
108 |
</option>
|
109 |
<?php endforeach; ?>
|
110 |
</select>
|
111 |
</div>
|
112 |
|
113 |
<label class="control-label">
|
114 |
+
<?php esc_html_e( 'SELECT LANGUAGE', 'googleanalytics' ); ?>
|
115 |
</label>
|
116 |
<div class="input-div">
|
117 |
<select id="st-language">
|
118 |
+
<?php foreach ( $languages as $language => $code ) : ?>
|
119 |
+
<option value="<?php echo esc_attr( $code ); ?>"
|
120 |
+
<?php
|
121 |
+
echo true === isset( $gdpr_config['language'] ) ?
|
122 |
+
selected( $code, $gdpr_config['language'] ) : '';
|
123 |
+
?>
|
124 |
+
>
|
125 |
+
<?php echo esc_html( $language ); ?>
|
126 |
</option>
|
127 |
<?php endforeach; ?>
|
128 |
</select>
|
131 |
<div class="accor-wrap">
|
132 |
<div class="accor-tab">
|
133 |
<span class="accor-arrow">►</span>
|
134 |
+
<?php esc_html_e( 'Appearance', 'simple-share-buttons-adder' ); ?>
|
135 |
</div>
|
136 |
<div class="accor-content">
|
137 |
<div class="well">
|
138 |
+
<?php require plugin_dir_path( __FILE__ ) . 'appearance.php'; ?>
|
139 |
</div>
|
140 |
</div>
|
141 |
</div>
|
142 |
<div class="accor-wrap">
|
143 |
<div class="accor-tab">
|
144 |
<span class="accor-arrow">►</span>
|
145 |
+
<?php esc_html_e( 'Purposes', 'simple-share-buttons-adder' ); ?>
|
146 |
</div>
|
147 |
<div class="accor-content">
|
148 |
<div class="well">
|
149 |
+
<?php require plugin_dir_path( __FILE__ ) . 'purposes.php'; ?>
|
150 |
</div>
|
151 |
</div>
|
152 |
</div>
|
153 |
<div class="accor-wrap">
|
154 |
<div class="accor-tab">
|
155 |
<span class="accor-arrow">►</span>
|
156 |
+
<?php esc_html_e( 'Exclusions', 'googleanalytics' ); ?>
|
157 |
</div>
|
158 |
<div class="accor-content">
|
159 |
<div class="well">
|
160 |
+
<?php require plugin_dir_path( __FILE__ ) . 'exclusions.php'; ?>
|
161 |
</div>
|
162 |
</div>
|
163 |
</div>
|
view/templates/gdpr.php
CHANGED
@@ -1,19 +1,27 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
|
4 |
-
|
5 |
-
|
6 |
-
|
7 |
-
|
8 |
-
|
9 |
-
|
10 |
-
|
11 |
-
|
12 |
-
|
13 |
-
|
14 |
-
|
15 |
-
|
16 |
-
|
17 |
-
|
18 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
19 |
<?php endif; ?>
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* GDPR view.
|
4 |
+
*
|
5 |
+
* @package GoogleAnalytics
|
6 |
+
*/
|
7 |
+
|
8 |
+
?>
|
9 |
+
<?php if ( true === empty( $gdpr_config ) ) : ?>
|
10 |
+
<tr>
|
11 |
+
<th scope="row"><?php esc_html_e( 'Enable GDPR Consent Management Tool', 'googleanalytics' ); ?>:</th>
|
12 |
+
</tr>
|
13 |
+
<tr>
|
14 |
+
<?php if ( true === Ga_Helper::are_features_enabled() ) : ?>
|
15 |
+
<td>
|
16 |
+
<button class="gdpr-enable"><?php esc_html_e( 'Enable' ); ?></button>
|
17 |
+
</td>
|
18 |
+
<?php else : ?>
|
19 |
+
<td>
|
20 |
+
<label class="<?php echo esc_attr( false === Ga_Helper::are_features_enabled() ? 'label-grey ga-tooltip' : '' ); ?>">
|
21 |
+
<button class="gdpr-enable" disabled="disabled"><?php esc_html_e( 'Enable' ); ?></button>
|
22 |
+
<span class="ga-tooltiptext ga-tt-abs"><?php echo esc_html( $tooltip ); ?></span>
|
23 |
+
</label>
|
24 |
+
</td>
|
25 |
+
<?php endif; ?>
|
26 |
+
</tr>
|
27 |
<?php endif; ?>
|
view/templates/purposes.php
CHANGED
@@ -1,5 +1,13 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
<h3>
|
2 |
-
<?php
|
3 |
</h3>
|
4 |
|
5 |
<div id="publisher-purpose" class="switch">
|
@@ -9,175 +17,195 @@
|
|
9 |
</div>
|
10 |
<div class="purpose-item">
|
11 |
<div class="title">
|
12 |
-
<?php
|
|
|
13 |
'1) Store and/or access information on a device (Do you collect information on users on your site through cookies or site identifiers?)',
|
14 |
'googleanalytics'
|
15 |
-
);
|
|
|
16 |
</div>
|
17 |
<label>
|
18 |
-
<?php
|
19 |
<input data-id="1" type="checkbox" name="purposes[1]" value="consent" checked/>
|
20 |
<span class="lever"></span>
|
21 |
</label>
|
22 |
</div>
|
23 |
<div class="purpose-item">
|
24 |
<div class="title">
|
25 |
-
<?php
|
|
|
26 |
'2) Select basic ads (Do you serve ads on your site?)',
|
27 |
'googleanalytics'
|
28 |
-
);
|
|
|
29 |
</div>
|
30 |
<label>
|
31 |
-
<?php
|
32 |
<input data-id="2" type="radio" name="purposes[2]" value="consent" checked/>
|
33 |
<span class="lever"></span>
|
34 |
</label>
|
35 |
<label>
|
36 |
-
<?php
|
37 |
<input data-id="2" type="radio" name="purposes[2]" value="legitimate"/>
|
38 |
<span class="lever"></span>
|
39 |
</label>
|
40 |
</div>
|
41 |
<div class="purpose-item">
|
42 |
<div class="title">
|
43 |
-
<?php
|
|
|
44 |
'3) Create a personalised ads profile (Do you create personalised advertising profiles associated with users on your site (ie: profiles based on demographic information, location, user’s activity)?)',
|
45 |
'googleanalytics'
|
46 |
-
);
|
|
|
47 |
</div>
|
48 |
<label>
|
49 |
-
<?php
|
50 |
<input data-id="3" type="radio" name="purposes[3]" value="consent" checked/>
|
51 |
<span class="lever"></span>
|
52 |
</label>
|
53 |
<label>
|
54 |
-
<?php
|
55 |
<input data-id="3" type="radio" name="purposes[3]" value="legitimate"/>
|
56 |
<span class="lever"></span>
|
57 |
</label>
|
58 |
</div>
|
59 |
<div class="purpose-item">
|
60 |
<div class="title">
|
61 |
-
<?php
|
|
|
62 |
'4) Select personalised ads (Do you show ads to users based on this user profile)',
|
63 |
'googleanalytics'
|
64 |
-
);
|
|
|
65 |
</div>
|
66 |
<label>
|
67 |
-
<?php
|
68 |
<input data-id="4" type="radio" name="purposes[4]" value="consent" checked/>
|
69 |
<span class="lever"></span>
|
70 |
</label>
|
71 |
<label>
|
72 |
-
<?php
|
73 |
<input data-id="4" type="radio" name="purposes[4]" value="legitimate"/>
|
74 |
<span class="lever"></span>
|
75 |
</label>
|
76 |
</div>
|
77 |
<div class="purpose-item">
|
78 |
<div class="title">
|
79 |
-
<?php
|
|
|
80 |
'5) Create a personalised content profile (Do you build a personalized content profile associated with users on your site based on the type of content they have viewed?)',
|
81 |
'googleanalytics'
|
82 |
-
);
|
|
|
83 |
</div>
|
84 |
<label>
|
85 |
-
<?php
|
86 |
<input data-id="5" type="radio" name="purposes[5]" value="consent" checked />
|
87 |
<span class="lever"></span>
|
88 |
</label>
|
89 |
<label>
|
90 |
-
<?php
|
91 |
<input data-id="5" type="radio" name="purposes[5]" value="legitimate"/>
|
92 |
<span class="lever"></span>
|
93 |
</label>
|
94 |
</div>
|
95 |
<div class="purpose-item">
|
96 |
<div class="title">
|
97 |
-
<?php
|
|
|
98 |
'6) Select personalised content (Do you serve content to the user on your site based on your recorded content interests)',
|
99 |
'googleanalytics'
|
100 |
-
);
|
|
|
101 |
</div>
|
102 |
<label>
|
103 |
-
<?php
|
104 |
<input data-id="6" type="radio" name="purposes[6]" value="consent" checked />
|
105 |
<span class="lever"></span>
|
106 |
</label>
|
107 |
<label>
|
108 |
-
<?php
|
109 |
<input data-id="6" type="radio" name="purposes[6]" value="legitimate"/>
|
110 |
<span class="lever"></span>
|
111 |
</label>
|
112 |
</div>
|
113 |
<div class="purpose-item">
|
114 |
<div class="title">
|
115 |
-
<?php
|
|
|
116 |
'7) Measure ad performance (Do you measure the performance of advertisements on your site)',
|
117 |
'googleanalytics'
|
118 |
-
);
|
|
|
119 |
</div>
|
120 |
<label>
|
121 |
-
<?php
|
122 |
<input data-id="7" type="radio" name="purposes[7]" value="consent" checked/>
|
123 |
<span class="lever"></span>
|
124 |
</label>
|
125 |
<label>
|
126 |
-
<?php
|
127 |
<input data-id="7" type="radio" name="purposes[7]" value="legitimate"/>
|
128 |
<span class="lever"></span>
|
129 |
</label>
|
130 |
</div>
|
131 |
<div class="purpose-item">
|
132 |
<div class="title">
|
133 |
-
<?php
|
|
|
134 |
'8) Measure content performance (Do you measure the performance of content served to your site visitors?)',
|
135 |
'googleanalytics'
|
136 |
-
);
|
|
|
137 |
</div>
|
138 |
<label>
|
139 |
-
<?php
|
140 |
<input data-id="8" type="radio" name="purposes[8]" value="consent" checked/>
|
141 |
<span class="lever"></span>
|
142 |
</label>
|
143 |
<label>
|
144 |
-
<?php
|
145 |
<input data-id="8" type="radio" name="purposes[8]" value="legitimate"/>
|
146 |
<span class="lever"></span>
|
147 |
</label>
|
148 |
</div>
|
149 |
<div class="purpose-item">
|
150 |
<div class="title">
|
151 |
-
<?php
|
|
|
152 |
'9) Apply market research to generate audience insights (Do you aggregate reporting on the ads or content show to your site visitors to advertisers)',
|
153 |
'googleanalytics'
|
154 |
-
);
|
|
|
155 |
</div>
|
156 |
<label>
|
157 |
-
<?php
|
158 |
<input data-id="9" type="radio" name="purposes[9]" value="consent" checked/>
|
159 |
<span class="lever"></span>
|
160 |
</label>
|
161 |
<label>
|
162 |
-
<?php
|
163 |
<input data-id="9" type="radio" name="purposes[9]" value="legitimate"/>
|
164 |
<span class="lever"></span>
|
165 |
</label>
|
166 |
</div>
|
167 |
<div class="purpose-item">
|
168 |
<div class="title">
|
169 |
-
<?php
|
|
|
170 |
'10) Develop and improve products (Do you use data collected on your site visitors to improve your systems or software or create new products?)',
|
171 |
'googleanalytics'
|
172 |
-
);
|
|
|
173 |
</div>
|
174 |
<label>
|
175 |
-
<?php
|
176 |
<input data-id="10" type="radio" name="purposes[10]" value="consent" checked/>
|
177 |
<span class="lever"></span>
|
178 |
</label>
|
179 |
<label>
|
180 |
-
<?php
|
181 |
<input data-id="10" type="radio" name="purposes[10]" value="legitimate"/>
|
182 |
<span class="lever"></span>
|
183 |
</label>
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Purposes view.
|
4 |
+
*
|
5 |
+
* @package GoogleAnalytics
|
6 |
+
*/
|
7 |
+
|
8 |
+
?>
|
9 |
<h3>
|
10 |
+
<?php esc_html_e( 'WHY ARE YOU COLLECTING CUSTOMER DATA?', 'googleanalytics' ); ?>
|
11 |
</h3>
|
12 |
|
13 |
<div id="publisher-purpose" class="switch">
|
17 |
</div>
|
18 |
<div class="purpose-item">
|
19 |
<div class="title">
|
20 |
+
<?php
|
21 |
+
esc_html_e(
|
22 |
'1) Store and/or access information on a device (Do you collect information on users on your site through cookies or site identifiers?)',
|
23 |
'googleanalytics'
|
24 |
+
);
|
25 |
+
?>
|
26 |
</div>
|
27 |
<label>
|
28 |
+
<?php esc_html_e( 'Consent', 'googleanalytics' ); ?>
|
29 |
<input data-id="1" type="checkbox" name="purposes[1]" value="consent" checked/>
|
30 |
<span class="lever"></span>
|
31 |
</label>
|
32 |
</div>
|
33 |
<div class="purpose-item">
|
34 |
<div class="title">
|
35 |
+
<?php
|
36 |
+
esc_html_e(
|
37 |
'2) Select basic ads (Do you serve ads on your site?)',
|
38 |
'googleanalytics'
|
39 |
+
);
|
40 |
+
?>
|
41 |
</div>
|
42 |
<label>
|
43 |
+
<?php esc_html_e( 'Consent', 'googleanalytics' ); ?>
|
44 |
<input data-id="2" type="radio" name="purposes[2]" value="consent" checked/>
|
45 |
<span class="lever"></span>
|
46 |
</label>
|
47 |
<label>
|
48 |
+
<?php esc_html_e( 'Legitimate Interest', 'googleanalytics' ); ?>
|
49 |
<input data-id="2" type="radio" name="purposes[2]" value="legitimate"/>
|
50 |
<span class="lever"></span>
|
51 |
</label>
|
52 |
</div>
|
53 |
<div class="purpose-item">
|
54 |
<div class="title">
|
55 |
+
<?php
|
56 |
+
esc_html_e(
|
57 |
'3) Create a personalised ads profile (Do you create personalised advertising profiles associated with users on your site (ie: profiles based on demographic information, location, user’s activity)?)',
|
58 |
'googleanalytics'
|
59 |
+
);
|
60 |
+
?>
|
61 |
</div>
|
62 |
<label>
|
63 |
+
<?php esc_html_e( 'Consent', 'googleanalytics' ); ?>
|
64 |
<input data-id="3" type="radio" name="purposes[3]" value="consent" checked/>
|
65 |
<span class="lever"></span>
|
66 |
</label>
|
67 |
<label>
|
68 |
+
<?php esc_html_e( 'Legitimate Interest', 'googleanalytics' ); ?>
|
69 |
<input data-id="3" type="radio" name="purposes[3]" value="legitimate"/>
|
70 |
<span class="lever"></span>
|
71 |
</label>
|
72 |
</div>
|
73 |
<div class="purpose-item">
|
74 |
<div class="title">
|
75 |
+
<?php
|
76 |
+
esc_html_e(
|
77 |
'4) Select personalised ads (Do you show ads to users based on this user profile)',
|
78 |
'googleanalytics'
|
79 |
+
);
|
80 |
+
?>
|
81 |
</div>
|
82 |
<label>
|
83 |
+
<?php esc_html_e( 'Consent', 'googleanalytics' ); ?>
|
84 |
<input data-id="4" type="radio" name="purposes[4]" value="consent" checked/>
|
85 |
<span class="lever"></span>
|
86 |
</label>
|
87 |
<label>
|
88 |
+
<?php esc_html_e( 'Legitimate Interest', 'googleanalytics' ); ?>
|
89 |
<input data-id="4" type="radio" name="purposes[4]" value="legitimate"/>
|
90 |
<span class="lever"></span>
|
91 |
</label>
|
92 |
</div>
|
93 |
<div class="purpose-item">
|
94 |
<div class="title">
|
95 |
+
<?php
|
96 |
+
esc_html_e(
|
97 |
'5) Create a personalised content profile (Do you build a personalized content profile associated with users on your site based on the type of content they have viewed?)',
|
98 |
'googleanalytics'
|
99 |
+
);
|
100 |
+
?>
|
101 |
</div>
|
102 |
<label>
|
103 |
+
<?php esc_html_e( 'Consent', 'googleanalytics' ); ?>
|
104 |
<input data-id="5" type="radio" name="purposes[5]" value="consent" checked />
|
105 |
<span class="lever"></span>
|
106 |
</label>
|
107 |
<label>
|
108 |
+
<?php esc_html_e( 'Legitimate Interest', 'googleanalytics' ); ?>
|
109 |
<input data-id="5" type="radio" name="purposes[5]" value="legitimate"/>
|
110 |
<span class="lever"></span>
|
111 |
</label>
|
112 |
</div>
|
113 |
<div class="purpose-item">
|
114 |
<div class="title">
|
115 |
+
<?php
|
116 |
+
esc_html_e(
|
117 |
'6) Select personalised content (Do you serve content to the user on your site based on your recorded content interests)',
|
118 |
'googleanalytics'
|
119 |
+
);
|
120 |
+
?>
|
121 |
</div>
|
122 |
<label>
|
123 |
+
<?php esc_html_e( 'Consent', 'googleanalytics' ); ?>
|
124 |
<input data-id="6" type="radio" name="purposes[6]" value="consent" checked />
|
125 |
<span class="lever"></span>
|
126 |
</label>
|
127 |
<label>
|
128 |
+
<?php esc_html_e( 'Legitimate Interest', 'googleanalytics' ); ?>
|
129 |
<input data-id="6" type="radio" name="purposes[6]" value="legitimate"/>
|
130 |
<span class="lever"></span>
|
131 |
</label>
|
132 |
</div>
|
133 |
<div class="purpose-item">
|
134 |
<div class="title">
|
135 |
+
<?php
|
136 |
+
esc_html_e(
|
137 |
'7) Measure ad performance (Do you measure the performance of advertisements on your site)',
|
138 |
'googleanalytics'
|
139 |
+
);
|
140 |
+
?>
|
141 |
</div>
|
142 |
<label>
|
143 |
+
<?php esc_html_e( 'Consent', 'googleanalytics' ); ?>
|
144 |
<input data-id="7" type="radio" name="purposes[7]" value="consent" checked/>
|
145 |
<span class="lever"></span>
|
146 |
</label>
|
147 |
<label>
|
148 |
+
<?php esc_html_e( 'Legitimate Interest', 'googleanalytics' ); ?>
|
149 |
<input data-id="7" type="radio" name="purposes[7]" value="legitimate"/>
|
150 |
<span class="lever"></span>
|
151 |
</label>
|
152 |
</div>
|
153 |
<div class="purpose-item">
|
154 |
<div class="title">
|
155 |
+
<?php
|
156 |
+
esc_html_e(
|
157 |
'8) Measure content performance (Do you measure the performance of content served to your site visitors?)',
|
158 |
'googleanalytics'
|
159 |
+
);
|
160 |
+
?>
|
161 |
</div>
|
162 |
<label>
|
163 |
+
<?php esc_html_e( 'Consent', 'googleanalytics' ); ?>
|
164 |
<input data-id="8" type="radio" name="purposes[8]" value="consent" checked/>
|
165 |
<span class="lever"></span>
|
166 |
</label>
|
167 |
<label>
|
168 |
+
<?php esc_html_e( 'Legitimate Interest', 'googleanalytics' ); ?>
|
169 |
<input data-id="8" type="radio" name="purposes[8]" value="legitimate"/>
|
170 |
<span class="lever"></span>
|
171 |
</label>
|
172 |
</div>
|
173 |
<div class="purpose-item">
|
174 |
<div class="title">
|
175 |
+
<?php
|
176 |
+
esc_html_e(
|
177 |
'9) Apply market research to generate audience insights (Do you aggregate reporting on the ads or content show to your site visitors to advertisers)',
|
178 |
'googleanalytics'
|
179 |
+
);
|
180 |
+
?>
|
181 |
</div>
|
182 |
<label>
|
183 |
+
<?php esc_html_e( 'Consent', 'googleanalytics' ); ?>
|
184 |
<input data-id="9" type="radio" name="purposes[9]" value="consent" checked/>
|
185 |
<span class="lever"></span>
|
186 |
</label>
|
187 |
<label>
|
188 |
+
<?php esc_html_e( 'Legitimate Interest', 'googleanalytics' ); ?>
|
189 |
<input data-id="9" type="radio" name="purposes[9]" value="legitimate"/>
|
190 |
<span class="lever"></span>
|
191 |
</label>
|
192 |
</div>
|
193 |
<div class="purpose-item">
|
194 |
<div class="title">
|
195 |
+
<?php
|
196 |
+
esc_html_e(
|
197 |
'10) Develop and improve products (Do you use data collected on your site visitors to improve your systems or software or create new products?)',
|
198 |
'googleanalytics'
|
199 |
+
);
|
200 |
+
?>
|
201 |
</div>
|
202 |
<label>
|
203 |
+
<?php esc_html_e( 'Consent', 'googleanalytics' ); ?>
|
204 |
<input data-id="10" type="radio" name="purposes[10]" value="consent" checked/>
|
205 |
<span class="lever"></span>
|
206 |
</label>
|
207 |
<label>
|
208 |
+
<?php esc_html_e( 'Legitimate Interest', 'googleanalytics' ); ?>
|
209 |
<input data-id="10" type="radio" name="purposes[10]" value="legitimate"/>
|
210 |
<span class="lever"></span>
|
211 |
</label>
|
view/templates/sidebar/demo-ad.php
CHANGED
@@ -1,60 +1,69 @@
|
|
1 |
<?php
|
2 |
/**
|
3 |
* Template for GDPR side bar ad in settings page.
|
|
|
|
|
4 |
*/
|
|
|
5 |
?>
|
6 |
<div class="sidebar-ad">
|
7 |
<div id="demo-ad">
|
8 |
<h2 style="text-decoration: underline;">
|
9 |
-
<?php esc_html_e('Demographics data now available!', 'googleanalytics'); ?>
|
10 |
</h2>
|
11 |
<div class="row">
|
12 |
<div class="col-md-12">
|
13 |
-
|
14 |
</div>
|
15 |
<div class="col-md-6">
|
16 |
<p>
|
17 |
-
<?php esc_html_e('Find out more about your target audience by enabling the demographics feature!', 'googleanalytics'); ?>
|
18 |
</p>
|
19 |
-
<h3><?php esc_html_e('Why Collect Demographics and Interests Data?', 'googleanalytics'); ?></h3>
|
20 |
<p>
|
21 |
-
<?php
|
|
|
22 |
'By viewing demographics data, you will learn more details about your visitors so you can deliver content/create products that address their needs!',
|
23 |
'googleanalytics'
|
24 |
-
);
|
|
|
25 |
</p>
|
26 |
</div>
|
27 |
<div class="col-md-6">
|
28 |
-
<h3><?php esc_html_e('Gender', 'googleanalytics'); ?></h3>
|
29 |
<p>
|
30 |
-
<?php
|
|
|
31 |
'Understanding exactly which gender visits different areas of your website, could allow you to optimise those areas accordingly.',
|
32 |
'googleanalytics'
|
33 |
-
);
|
|
|
34 |
</p>
|
35 |
</div>
|
36 |
</div>
|
37 |
<div class="row">
|
38 |
<div class="col-md-6">
|
39 |
-
<h3><?php esc_html_e('Age', 'googleanalytics'); ?></h3>
|
40 |
<p>
|
41 |
-
<?php
|
|
|
42 |
'Determine your site\'s age demographic and make the site more friendly to use for that group.',
|
43 |
'googleanalytics'
|
44 |
-
);
|
|
|
45 |
</p>
|
46 |
</div>
|
47 |
</div>
|
48 |
<div class="row register-section">
|
49 |
-
<?php if ( Ga_Helper::are_features_enabled() ) : ?>
|
50 |
<td>
|
51 |
-
<button id="demographic-popup"><?php esc_html_e('Enable'); ?></button>
|
52 |
</td>
|
53 |
<?php else : ?>
|
54 |
<td>
|
55 |
-
<label class="<?php echo (
|
56 |
-
<button class="gdpr-enable" disabled="disabled"><?php esc_html_e('Enable'); ?></button>
|
57 |
-
<span class="ga-tooltiptext ga-tt-abs"><?php
|
58 |
</label>
|
59 |
</td>
|
60 |
<?php endif; ?>
|
1 |
<?php
|
2 |
/**
|
3 |
* Template for GDPR side bar ad in settings page.
|
4 |
+
*
|
5 |
+
* @package GoogleAnalytics
|
6 |
*/
|
7 |
+
|
8 |
?>
|
9 |
<div class="sidebar-ad">
|
10 |
<div id="demo-ad">
|
11 |
<h2 style="text-decoration: underline;">
|
12 |
+
<?php esc_html_e( 'Demographics data now available!', 'googleanalytics' ); ?>
|
13 |
</h2>
|
14 |
<div class="row">
|
15 |
<div class="col-md-12">
|
16 |
+
<img src="<?php echo esc_url( $plugin_uri . 'assets/images/demographics-ex.png' ); ?>"/>
|
17 |
</div>
|
18 |
<div class="col-md-6">
|
19 |
<p>
|
20 |
+
<?php esc_html_e( 'Find out more about your target audience by enabling the demographics feature!', 'googleanalytics' ); ?>
|
21 |
</p>
|
22 |
+
<h3><?php esc_html_e( 'Why Collect Demographics and Interests Data?', 'googleanalytics' ); ?></h3>
|
23 |
<p>
|
24 |
+
<?php
|
25 |
+
esc_html_e(
|
26 |
'By viewing demographics data, you will learn more details about your visitors so you can deliver content/create products that address their needs!',
|
27 |
'googleanalytics'
|
28 |
+
);
|
29 |
+
?>
|
30 |
</p>
|
31 |
</div>
|
32 |
<div class="col-md-6">
|
33 |
+
<h3><?php esc_html_e( 'Gender', 'googleanalytics' ); ?></h3>
|
34 |
<p>
|
35 |
+
<?php
|
36 |
+
esc_html_e(
|
37 |
'Understanding exactly which gender visits different areas of your website, could allow you to optimise those areas accordingly.',
|
38 |
'googleanalytics'
|
39 |
+
);
|
40 |
+
?>
|
41 |
</p>
|
42 |
</div>
|
43 |
</div>
|
44 |
<div class="row">
|
45 |
<div class="col-md-6">
|
46 |
+
<h3><?php esc_html_e( 'Age', 'googleanalytics' ); ?></h3>
|
47 |
<p>
|
48 |
+
<?php
|
49 |
+
esc_html_e(
|
50 |
'Determine your site\'s age demographic and make the site more friendly to use for that group.',
|
51 |
'googleanalytics'
|
52 |
+
);
|
53 |
+
?>
|
54 |
</p>
|
55 |
</div>
|
56 |
</div>
|
57 |
<div class="row register-section">
|
58 |
+
<?php if ( true === Ga_Helper::are_features_enabled() ) : ?>
|
59 |
<td>
|
60 |
+
<button id="demographic-popup"><?php esc_html_e( 'Enable' ); ?></button>
|
61 |
</td>
|
62 |
<?php else : ?>
|
63 |
<td>
|
64 |
+
<label class="<?php echo esc_attr( false === Ga_Helper::are_features_enabled() ? 'label-grey ga-tooltip' : '' ); ?>">
|
65 |
+
<button class="gdpr-enable" disabled="disabled"><?php esc_html_e( 'Enable' ); ?></button>
|
66 |
+
<span class="ga-tooltiptext ga-tt-abs"><?php echo esc_html( $tooltip ); ?></span>
|
67 |
</label>
|
68 |
</td>
|
69 |
<?php endif; ?>
|
view/templates/sidebar/gdpr-ad.php
CHANGED
@@ -1,66 +1,77 @@
|
|
1 |
<?php
|
2 |
/**
|
3 |
* Template for GDPR side bar ad in settings page.
|
|
|
|
|
4 |
*/
|
|
|
5 |
?>
|
6 |
<div class="sidebar-ad">
|
7 |
<div id="gdpr-ad">
|
8 |
<h2 style="text-decoration: underline;">
|
9 |
-
<?php esc_html_e('Check out our new GDPR Compliance Tool!', 'googleanalytics'); ?>
|
10 |
</h2>
|
11 |
<div class="row">
|
12 |
<div class="col-md-12">
|
13 |
-
<img src="<?php echo $plugin_uri . 'assets/images/gdpr-ex.png'; ?>" />
|
14 |
</div>
|
15 |
<div class="col-md-6">
|
16 |
-
<h3><?php esc_html_e('Confirm Consent', 'googleanalytics'); ?></h3>
|
17 |
<p>
|
18 |
-
<?php
|
|
|
19 |
'A simple and streamlined way to confirm a user’s initial acceptance or rejection of cookie collection',
|
20 |
'googleanalytics'
|
21 |
-
);
|
|
|
22 |
</p>
|
23 |
</div>
|
24 |
<div class="col-md-6">
|
25 |
-
<h3><?php esc_html_e('Select Purpose', 'googleanalytics'); ?></h3>
|
26 |
<p>
|
27 |
-
<?php
|
|
|
28 |
'A transparent system of verifying the intent of collecting a user’s cookies, and giving the option to opt in or out',
|
29 |
'googleanalytics'
|
30 |
-
);
|
|
|
31 |
</p>
|
32 |
</div>
|
33 |
</div>
|
34 |
<div class="row">
|
35 |
<div class="col-md-6">
|
36 |
-
<h3><?php esc_html_e('Indicate Company', 'googleanalytics'); ?></h3>
|
37 |
<p>
|
38 |
-
<?php
|
|
|
39 |
'A comprehensive record of company-level information that allows users to monitor and control the recipients of cookie collection',
|
40 |
'googleanalytics'
|
41 |
-
);
|
|
|
42 |
</p>
|
43 |
</div>
|
44 |
<div class="col-md-6">
|
45 |
-
<h3><?php esc_html_e('Access Data Rights', 'googleanalytics'); ?></h3>
|
46 |
<p>
|
47 |
-
<?php
|
|
|
48 |
'A centralized database where users can review the latest privacy policies and information pertaining to their cookie collection',
|
49 |
'googleanalytics'
|
50 |
-
);
|
|
|
51 |
</p>
|
52 |
</div>
|
53 |
</div>
|
54 |
<div class="row register-section">
|
55 |
-
<?php if ( Ga_Helper::are_features_enabled() ) : ?>
|
56 |
<td>
|
57 |
-
<button class="gdpr-enable"><?php esc_html_e('Enable'); ?></button>
|
58 |
</td>
|
59 |
<?php else : ?>
|
60 |
<td>
|
61 |
-
<label class="<?php echo (
|
62 |
-
<button class="gdpr-enable" disabled="disabled"><?php esc_html_e('Enable'); ?></button>
|
63 |
-
<span class="ga-tooltiptext ga-tt-abs"><?php
|
64 |
</label>
|
65 |
</td>
|
66 |
<?php endif; ?>
|
1 |
<?php
|
2 |
/**
|
3 |
* Template for GDPR side bar ad in settings page.
|
4 |
+
*
|
5 |
+
* @package GoogleAnalytics
|
6 |
*/
|
7 |
+
|
8 |
?>
|
9 |
<div class="sidebar-ad">
|
10 |
<div id="gdpr-ad">
|
11 |
<h2 style="text-decoration: underline;">
|
12 |
+
<?php esc_html_e( 'Check out our new GDPR Compliance Tool!', 'googleanalytics' ); ?>
|
13 |
</h2>
|
14 |
<div class="row">
|
15 |
<div class="col-md-12">
|
16 |
+
<img src="<?php echo esc_url( $plugin_uri . 'assets/images/gdpr-ex.png' ); ?>" />
|
17 |
</div>
|
18 |
<div class="col-md-6">
|
19 |
+
<h3><?php esc_html_e( 'Confirm Consent', 'googleanalytics' ); ?></h3>
|
20 |
<p>
|
21 |
+
<?php
|
22 |
+
esc_html_e(
|
23 |
'A simple and streamlined way to confirm a user’s initial acceptance or rejection of cookie collection',
|
24 |
'googleanalytics'
|
25 |
+
);
|
26 |
+
?>
|
27 |
</p>
|
28 |
</div>
|
29 |
<div class="col-md-6">
|
30 |
+
<h3><?php esc_html_e( 'Select Purpose', 'googleanalytics' ); ?></h3>
|
31 |
<p>
|
32 |
+
<?php
|
33 |
+
esc_html_e(
|
34 |
'A transparent system of verifying the intent of collecting a user’s cookies, and giving the option to opt in or out',
|
35 |
'googleanalytics'
|
36 |
+
);
|
37 |
+
?>
|
38 |
</p>
|
39 |
</div>
|
40 |
</div>
|
41 |
<div class="row">
|
42 |
<div class="col-md-6">
|
43 |
+
<h3><?php esc_html_e( 'Indicate Company', 'googleanalytics' ); ?></h3>
|
44 |
<p>
|
45 |
+
<?php
|
46 |
+
esc_html_e(
|
47 |
'A comprehensive record of company-level information that allows users to monitor and control the recipients of cookie collection',
|
48 |
'googleanalytics'
|
49 |
+
);
|
50 |
+
?>
|
51 |
</p>
|
52 |
</div>
|
53 |
<div class="col-md-6">
|
54 |
+
<h3><?php esc_html_e( 'Access Data Rights', 'googleanalytics' ); ?></h3>
|
55 |
<p>
|
56 |
+
<?php
|
57 |
+
esc_html_e(
|
58 |
'A centralized database where users can review the latest privacy policies and information pertaining to their cookie collection',
|
59 |
'googleanalytics'
|
60 |
+
);
|
61 |
+
?>
|
62 |
</p>
|
63 |
</div>
|
64 |
</div>
|
65 |
<div class="row register-section">
|
66 |
+
<?php if ( true === Ga_Helper::are_features_enabled() ) : ?>
|
67 |
<td>
|
68 |
+
<button class="gdpr-enable"><?php esc_html_e( 'Enable', 'googleanalytics' ); ?></button>
|
69 |
</td>
|
70 |
<?php else : ?>
|
71 |
<td>
|
72 |
+
<label class="<?php echo esc_attr( false === Ga_Helper::are_features_enabled() ? 'label-grey ga-tooltip' : '' ); ?>">
|
73 |
+
<button class="gdpr-enable" disabled="disabled"><?php esc_html_e( 'Enable', 'googleanalytics' ); ?></button>
|
74 |
+
<span class="ga-tooltiptext ga-tt-abs"><?php echo esc_html( $tooltip ); ?></span>
|
75 |
</label>
|
76 |
</td>
|
77 |
<?php endif; ?>
|
view/trending.php
CHANGED
@@ -1,96 +1,127 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
<div class="wrap ga-wrap">
|
2 |
-
|
3 |
-
|
4 |
-
|
5 |
-
|
6 |
-
<?php if (
|
7 |
-
<?php echo $data['error_message']; ?>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
8 |
<?php endif; ?>
|
9 |
-
|
10 |
-
|
11 |
-
|
12 |
-
|
13 |
-
|
14 |
-
|
15 |
-
|
16 |
-
|
17 |
-
|
18 |
-
|
19 |
-
|
20 |
-
<?php if ( ! empty( $alerts ) && empty( $alerts->error ) ) : ?>
|
21 |
-
<div class="trending-table-container">
|
22 |
-
<table class="ga-table ga-table-trending">
|
23 |
-
<tr>
|
24 |
-
<th>
|
25 |
-
<?php _e( 'Top 5 Recent alerts' ); ?>
|
26 |
-
</th>
|
27 |
-
<th class="weight-normal">
|
28 |
-
<?php _e( 'Views' ); ?>
|
29 |
-
</th>
|
30 |
-
<th class="weight-normal trending-time">
|
31 |
-
<?php _e( 'Time Notified' ); ?>
|
32 |
-
</th>
|
33 |
-
</tr>
|
34 |
-
<?php foreach ( $alerts as $key => $alert ) : ?>
|
35 |
-
<tr>
|
36 |
-
<td>
|
37 |
-
<a class="trending-link"
|
38 |
-
href="<?php echo $alert->{"url"}; ?>"><?php echo $alert->{"url"}; ?></a>
|
39 |
-
</td>
|
40 |
-
<td><?php echo ( property_exists( $alert, "pageviews" ) ) ? $alert->{"pageviews"} : '0'; ?></td>
|
41 |
-
<td><?php echo date( 'F jS, g:ia', strtotime( $alert->{"sent_at"} ) ); ?></td>
|
42 |
-
</tr>
|
43 |
-
<?php if ( $key >= 4 ) {
|
44 |
-
break;
|
45 |
-
} ?>
|
46 |
-
<?php endforeach; ?>
|
47 |
-
</table>
|
48 |
-
</div>
|
49 |
-
<?php elseif ( ! empty( $alerts->error ) ) : ?>
|
50 |
-
<div class="ga-alert ga-alert-danger">
|
51 |
-
<?php _e( $alerts->error ); ?>
|
52 |
-
</div>
|
53 |
-
<?php else : ?>
|
54 |
-
<div class="ga-alert ga-alert-warning">
|
55 |
-
<?php _e( 'You will see a history of trending content here once the first article takes off.' ); ?>
|
56 |
-
<a class="ga-alert-link" href="http://tiny.cc/trending/"><?php _e( 'Click here to learn more' ); ?></a>
|
57 |
-
</div>
|
58 |
-
<?php endif; ?>
|
59 |
-
<?php endif; ?>
|
60 |
-
<div>
|
61 |
-
<form method="post">
|
62 |
-
<?php wp_nonce_field(Ga_Admin_Controller::ACTION_SHARETHIS_INVITE, Ga_Admin_Controller::GA_NONCE_FIELD_NAME); ?>
|
63 |
-
<input type="hidden" name="<?php echo Ga_Controller_Core::ACTION_PARAM_NAME; ?>"
|
64 |
-
value="<?php echo Ga_Admin_Controller::ACTION_SHARETHIS_INVITE; ?>">
|
65 |
-
<table>
|
66 |
<tr class="ga-ta-header">
|
67 |
<th>
|
68 |
-
<?php
|
69 |
</th>
|
70 |
</tr>
|
71 |
-
|
72 |
-
|
73 |
-
<?php
|
74 |
-
|
75 |
-
|
76 |
-
|
77 |
-
|
78 |
-
|
79 |
-
|
80 |
-
|
81 |
-
|
82 |
-
|
83 |
-
|
84 |
-
|
85 |
-
|
86 |
-
|
87 |
-
|
88 |
-
|
89 |
-
|
|
|
|
|
|
|
|
|
|
|
90 |
</div>
|
91 |
|
92 |
<script type="text/javascript">
|
93 |
-
|
94 |
-
|
95 |
<?php endif; ?>
|
96 |
</script>
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Trending view.
|
4 |
+
*
|
5 |
+
* @package GoogleAnalytics
|
6 |
+
*/
|
7 |
+
|
8 |
+
?>
|
9 |
<div class="wrap ga-wrap">
|
10 |
+
<h3 class="ga-trending-h3">Google Analytics</h3>
|
11 |
+
<h2 class="ga-trending-h2"><?php esc_html_e( 'Trending content', 'googleanalytics' ); ?></h2>
|
12 |
+
<div class="ga_container <?php echo esc_attr( false === Ga_Helper::are_features_enabled() ? 'label-grey ga-tooltip' : '' ); ?>"
|
13 |
+
id="exTab2">
|
14 |
+
<?php if ( false === empty( $data['error_message'] ) ) : ?>
|
15 |
+
<?php echo esc_html( $data['error_message'] ); ?>
|
16 |
+
<?php endif; ?>
|
17 |
+
<?php if ( false === empty( $data['ga_msg'] ) ) : ?>
|
18 |
+
<?php echo esc_html( $data['ga_msg'] ); ?>
|
19 |
+
<?php endif; ?>
|
20 |
+
<span class="ga-tooltiptext ga-tooltiptext-trending"><?php echo esc_html( $tooltip ); ?></span>
|
21 |
+
<div class="ga-trending-loader">
|
22 |
+
<div class="ga-trending-loader-wrapper">
|
23 |
+
<div class="ga-loader"></div>
|
24 |
+
</div>
|
25 |
+
<div class="ga-trending-loading-text"><?php echo esc_html__( 'Please wait. Trending Content Alerts are loading.', 'googleanalytics' ); ?></div>
|
26 |
+
</div>
|
27 |
+
<?php if ( true === Ga_Helper::are_features_enabled() && true === empty( $errors ) ) : ?>
|
28 |
+
<?php if ( false === empty( $alerts ) && true === empty( $alerts->error ) ) : ?>
|
29 |
+
<div class="trending-table-container">
|
30 |
+
<table class="ga-table ga-table-trending">
|
31 |
+
<tr>
|
32 |
+
<th>
|
33 |
+
<?php echo esc_html__( 'Top 5 Recent alerts', 'googleanalytics' ); ?>
|
34 |
+
</th>
|
35 |
+
<th class="weight-normal">
|
36 |
+
<?php echo esc_html__( 'Views', 'googleanalytics' ); ?>
|
37 |
+
</th>
|
38 |
+
<th class="weight-normal trending-time">
|
39 |
+
<?php echo esc_html__( 'Time Notified', 'googleanalytics' ); ?>
|
40 |
+
</th>
|
41 |
+
</tr>
|
42 |
+
<?php foreach ( $alerts as $key => $alert ) : ?>
|
43 |
+
<tr>
|
44 |
+
<td>
|
45 |
+
<a class="trending-link" href="<?php echo esc_url( $alert->{'url'} ); ?>">
|
46 |
+
<?php echo esc_html( $alert->{'url'} ); ?>
|
47 |
+
</a>
|
48 |
+
</td>
|
49 |
+
<td>
|
50 |
+
<?php
|
51 |
+
echo esc_html(
|
52 |
+
property_exists(
|
53 |
+
$alert,
|
54 |
+
'pageviews'
|
55 |
+
) ? $alert->{'pageviews'} : '0'
|
56 |
+
);
|
57 |
+
?>
|
58 |
+
</td>
|
59 |
+
<td><?php echo esc_html( gmdate( 'F jS, g:ia', strtotime( $alert->{'sent_at'} ) ) ); ?></td>
|
60 |
+
</tr>
|
61 |
+
<?php
|
62 |
+
if ( $key >= 4 ) {
|
63 |
+
break;
|
64 |
+
}
|
65 |
+
?>
|
66 |
+
<?php endforeach; ?>
|
67 |
+
</table>
|
68 |
+
</div>
|
69 |
+
<?php elseif ( ! empty( $alerts->error ) ) : ?>
|
70 |
+
<div class="ga-alert ga-alert-danger">
|
71 |
+
<?php echo wp_kses_post( $alerts->error ); ?>
|
72 |
+
</div>
|
73 |
+
<?php else : ?>
|
74 |
+
<div class="ga-alert ga-alert-warning">
|
75 |
+
<?php echo esc_html__( 'You will see a history of trending content here once the first article takes off.', 'googleanalytics' ); ?>
|
76 |
+
<a class="ga-alert-link"
|
77 |
+
href="http://tiny.cc/trending/"><?php echo esc_html__( 'Click here to learn more', 'googleanalytics' ); ?></a>
|
78 |
+
</div>
|
79 |
+
<?php endif; ?>
|
80 |
<?php endif; ?>
|
81 |
+
<div>
|
82 |
+
<form method="post">
|
83 |
+
<?php
|
84 |
+
wp_nonce_field(
|
85 |
+
Ga_Admin_Controller::ACTION_SHARETHIS_INVITE,
|
86 |
+
Ga_Admin_Controller::GA_NONCE_FIELD_NAME
|
87 |
+
);
|
88 |
+
?>
|
89 |
+
<input type="hidden" name="<?php echo esc_attr( Ga_Controller_Core::ACTION_PARAM_NAME ); ?>"
|
90 |
+
value="<?php echo esc_attr( Ga_Admin_Controller::ACTION_SHARETHIS_INVITE ); ?>">
|
91 |
+
<table>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
92 |
<tr class="ga-ta-header">
|
93 |
<th>
|
94 |
+
<?php echo esc_html__( 'Trending alerts', 'googleanalytics' ); ?>
|
95 |
</th>
|
96 |
</tr>
|
97 |
+
<tr>
|
98 |
+
<td>
|
99 |
+
<?php
|
100 |
+
echo esc_html__(
|
101 |
+
'Interested in receiving alerts via slack or email? Sign into your Social Optimization Platform account and activate it!
|
102 |
+
Enter your email and we\'ll send you an invite',
|
103 |
+
'googleanalytics'
|
104 |
+
);
|
105 |
+
?>
|
106 |
+
</td>
|
107 |
+
</tr>
|
108 |
+
<tr>
|
109 |
+
<td><?php echo esc_html__( 'Enter your email to receive an invite', 'googleanalytics' ); ?>
|
110 |
+
<input name="sharethis_invite_email" type="email" value=""
|
111 |
+
<?php echo disabled( false === Ga_Helper::are_features_enabled() ); ?>
|
112 |
+
placeholder="Your email address">
|
113 |
+
<button <?php echo disabled( false === Ga_Helper::are_features_enabled() ); ?>
|
114 |
+
type="submit" class="button button-primary"><?php echo esc_html__( 'Send' ); ?></button>
|
115 |
+
</td>
|
116 |
+
</tr>
|
117 |
+
</table>
|
118 |
+
</form>
|
119 |
+
</div>
|
120 |
+
</div>
|
121 |
</div>
|
122 |
|
123 |
<script type="text/javascript">
|
124 |
+
<?php if ( Ga_Helper::are_features_enabled() ) : ?>
|
125 |
+
ga_trending_loader.show();
|
126 |
<?php endif; ?>
|
127 |
</script>
|