Changeset 3371554
- Timestamp:
- 10/02/2025 06:38:00 AM (6 months ago)
- Location:
- myagileprivacy
- Files:
-
- 9 edited
-
assets/banner-1544x500.png (modified) (previous)
-
assets/banner-772x250.png (modified) (previous)
-
trunk/admin/my-agile-privacy-admin.php (modified) (2 diffs)
-
trunk/frontend/js/plain/my-agile-privacy-frontend.js (modified) (5 diffs)
-
trunk/frontend/my-agile-privacy-frontend.php (modified) (3 diffs)
-
trunk/includes/my-agile-privacy-class.php (modified) (3 diffs)
-
trunk/includes/my-agile-privacy-regulation-helper.php (modified) (7 diffs)
-
trunk/my-agile-privacy.php (modified) (2 diffs)
-
trunk/readme.txt (modified) (5 diffs)
Legend:
- Unmodified
- Added
- Removed
-
myagileprivacy/trunk/admin/my-agile-privacy-admin.php
r3367575 r3371554 747 747 748 748 if( defined( 'MAP_DEBUGGER' ) && MAP_DEBUGGER ) MyAgilePrivacy::write_log( "START sync_cookies_and_fixed_texts" ); 749 750 if( function_exists( 'wp_raise_memory_limit' ) ) 751 { 752 wp_raise_memory_limit( 'admin' ); 753 } 749 754 750 755 $currentAndSupportedLanguages = MyAgilePrivacy::getCurrentAndSupportedLanguages(); … … 3160 3165 3161 3166 // Secure queries using prepared statements 3162 $cookie_published_count = $wpdb->get_var($wpdb->prepare( 3163 "SELECT COUNT(*) FROM {$wpdb->prefix}posts WHERE post_type = %s AND post_status = %s", 3164 MAP_POST_TYPE_COOKIES, 3165 'publish' 3166 )); 3167 $cookie_total_count = $wpdb->get_var($wpdb->prepare( 3168 "SELECT COUNT(*) FROM {$wpdb->prefix}posts WHERE post_type = %s", 3169 MAP_POST_TYPE_COOKIES 3170 )); 3171 3167 $cookie_published_count = $wpdb->get_var( 3168 $wpdb->prepare( 3169 "SELECT COUNT(DISTINCT pm.meta_value) 3170 FROM {$wpdb->posts} p 3171 INNER JOIN {$wpdb->postmeta} pm ON pm.post_id = p.ID 3172 WHERE p.post_type = %s 3173 AND p.post_status = %s 3174 AND pm.meta_key = %s", 3175 MAP_POST_TYPE_COOKIES, 3176 'publish', 3177 '_map_api_key' 3178 ) 3179 ); 3172 3180 $last_scan_date_human = '-'; 3173 3181 -
myagileprivacy/trunk/frontend/js/plain/my-agile-privacy-frontend.js
r3367575 r3371554 7 7 'plugin_version' : null, 8 8 'parse_config_version_number' : null, 9 'internal_version' : "2.002 1",9 'internal_version' : "2.0022", 10 10 'cookie_shield_version' : null, 11 11 'technology' : "plain", … … 38 38 'last_consent_modify_date' : null, 39 39 'some_positive_consent_given' : false, 40 'early_gcmode' : false, 40 41 }; 41 42 … … 758 759 if( MAP_SYS.cmode_v2 && MAP_SYS.cmode_v2_implementation_type == 'native' ) 759 760 { 760 if( MAP_SYS?.map_debug ) console.debug( MAP_SYS.maplog + 'setting default value for consent mode (native)' ); 761 762 //save starting consent 763 MAP_SYS.starting_gconsent = map_full_config?.cmode_v2_default_consent_obj; 764 765 //setting default consent value 766 767 if( MAP_SYS?.map_debug ) console.debug( MAP_SYS.maplog + 'setting default consent (native)' ); 768 769 //setting initial current_gconsent value (deep copy using spread operator) 770 MAP_SYS.current_gconsent = { ...MAP_SYS.starting_gconsent }; 771 772 try { 773 gtag( 'consent', 'default', { ...MAP_SYS.starting_gconsent } ); 774 } 775 catch( error ) 776 { 777 console.error( error ); 761 if( typeof map_full_config.early_gcmode !== 'undefined' && map_full_config.early_gcmode 762 ) 763 { 764 if( typeof early_starting_gconsent !== 'undefined' && early_starting_gconsent ) 765 { 766 if( MAP_SYS?.map_debug ) console.debug( MAP_SYS.maplog + 'setting default value for consent mode (native) via early consent' ); 767 768 //save starting consent 769 MAP_SYS.starting_gconsent = early_starting_gconsent; 770 771 if( MAP_SYS?.map_debug ) console.debug( MAP_SYS.maplog + 'setting default consent (native)' ); 772 773 //setting initial current_gconsent value (deep copy using spread operator) 774 MAP_SYS.current_gconsent = { ...MAP_SYS.starting_gconsent }; 775 776 MAP_SYS.early_gcmode = true; 777 } 778 } 779 else 780 { 781 if( MAP_SYS?.map_debug ) console.debug( MAP_SYS.maplog + 'setting default value for consent mode (native)' ); 782 783 //save starting consent 784 MAP_SYS.starting_gconsent = map_full_config?.cmode_v2_default_consent_obj; 785 786 //setting default consent value 787 788 if( MAP_SYS?.map_debug ) console.debug( MAP_SYS.maplog + 'setting default consent (native)' ); 789 790 //setting initial current_gconsent value (deep copy using spread operator) 791 MAP_SYS.current_gconsent = { ...MAP_SYS.starting_gconsent }; 792 793 try { 794 gtag( 'consent', 'default', { ...MAP_SYS.starting_gconsent } ); 795 } 796 catch( error ) 797 { 798 console.error( error ); 799 } 778 800 } 779 801 … … 787 809 MAP_SYS.current_gconsent = { ...this_gconsent }; 788 810 789 if( JSON.stringify( this_gconsent ) !== JSON.stringify( MAP_SYS.starting_gconsent ) ) 790 { 791 if( MAP_SYS?.map_debug ) console.debug( MAP_SYS.maplog + 'setting consent with value=' + cookieValue ); 792 793 that.updateGoogleConsentbyObj( this_gconsent, false ); 794 } 811 if( MAP_SYS?.map_debug ) console.debug( MAP_SYS.maplog + 'setting consent with value=' + cookieValue ); 812 813 that.updateGoogleConsentbyObj( this_gconsent, false ); 814 795 815 } 796 816 else … … 798 818 that.saveGoogleConsentStatusToCookie( MAP_SYS.current_gconsent ); 799 819 } 800 801 820 } 802 821 -
myagileprivacy/trunk/frontend/my-agile-privacy-frontend.php
r3367575 r3371554 2259 2259 } 2260 2260 2261 $early_gcmode = true; 2262 2263 //js_shield_test_mode mode 2264 if( isset( $rconfig ) && 2265 isset( $rconfig['disable_early_gcmode'] ) && 2266 $rconfig['disable_early_gcmode'] == 1 ) 2267 { 2268 $early_gcmode = false; 2269 } 2270 2271 2261 2272 $map_full_config = array( 2262 2273 'config_origin' => 'myagileprivacy_native', … … 2292 2303 'cmode_v2_js_on_error' => null, 2293 2304 'shield_added_pattern' => $shield_added_pattern, 2305 'early_gcmode' => $early_gcmode, 2294 2306 ); 2295 2307 … … 2387 2399 } 2388 2400 2389 $base_config_script .= 'window.dataLayer = window.dataLayer || [];'.PHP_EOL; 2390 $base_config_script .= 'function gtag(){dataLayer.push(arguments);}'.PHP_EOL; 2391 2392 $base_config_script .= "gtag('set', 'developer_id.dY2ZhMm', true);".PHP_EOL; 2393 2394 if( $map_full_config['enable_cmode_url_passthrough'] ) 2395 { 2396 $base_config_script .= "gtag('set', 'url_passthrough', true);".PHP_EOL; 2397 } 2401 //early_gcmode 2402 if( !$map_full_config['early_gcmode'] ) 2403 { 2404 $base_config_script .= 'window.dataLayer = window.dataLayer || [];'.PHP_EOL; 2405 $base_config_script .= 'function gtag(){dataLayer.push(arguments);}'.PHP_EOL; 2406 2407 $base_config_script .= "gtag('set', 'developer_id.dY2ZhMm', true);".PHP_EOL; 2408 2409 if( $map_full_config['enable_cmode_url_passthrough'] ) 2410 { 2411 $base_config_script .= "gtag('set', 'url_passthrough', true);".PHP_EOL; 2412 } 2413 } 2414 2398 2415 } 2399 2416 -
myagileprivacy/trunk/includes/my-agile-privacy-class.php
r3367575 r3371554 637 637 if( !empty( self::$stored_options ) ) 638 638 { 639 //use default setting in case of missing site_and_policy_settings array 640 if( 641 isset( self::$stored_options['site_and_policy_settings'] ) && 642 !is_array( self::$stored_options['site_and_policy_settings'] ) 643 ) 644 { 645 self::$stored_options['site_and_policy_settings'] = $settings['site_and_policy_settings']; 646 } 647 639 648 foreach( self::$stored_options as $key => $option ) 640 649 { … … 825 834 case 'fixed_translations_encoded': 826 835 case 'layer_1_button_order': 836 case 'site_and_policy_settings': 827 837 $logic = 'raw'; 828 838 break; … … 1333 1343 ); 1334 1344 1335 1336 $settings = apply_filters( 'map_plugin_settings', $settings); 1345 $settings = apply_filters( 'map_plugin_settings', $settings ); 1337 1346 1338 1347 return $key != "" ? $settings[ $key ] : $settings; -
myagileprivacy/trunk/includes/my-agile-privacy-regulation-helper.php
r3367575 r3371554 204 204 $regulation_config = array(); 205 205 206 $to_add_keys = array( 207 ); 206 $to_add_keys = array(); 208 207 209 208 foreach( self::$available_regulations as $item ) … … 246 245 if( isset( self::$site_and_policy_settings['base_location'] ) ) 247 246 { 248 if( self::$site_and_policy_settings['base_location'] == 'us' ) 247 if( isset( self::$site_and_policy_settings['base_location'] ) && 248 self::$site_and_policy_settings['base_location'] == 'us' ) 249 249 { 250 250 foreach( self::$available_countries['usa_sub_list'] as $usa_item ) … … 379 379 $pa = ( isset( self::$the_settings['pa'] ) && self::$the_settings['pa'] == 1 ); 380 380 381 $map_dpo_text = ( $pa && self::$site_and_policy_settings['display_dpo'] == 1 ) ? true : false; 381 $map_dpo_text = ( $pa && 382 isset( self::$site_and_policy_settings['display_dpo'] ) && 383 self::$site_and_policy_settings['display_dpo'] == 1 384 ) ? true : false; 382 385 383 386 $map_dpo_text_unset = ( !$map_dpo_text ) ? true : false; 384 387 388 $identity_name = ( 389 isset( self::$site_and_policy_settings['identity_name'] ) && 390 self::$site_and_policy_settings['identity_name'] 391 ) ? self::$site_and_policy_settings['identity_name'] : null; 392 393 $identity_address = ( 394 isset( self::$site_and_policy_settings['identity_address'] ) && 395 self::$site_and_policy_settings['identity_address'] 396 ) ? self::$site_and_policy_settings['identity_address'] : null; 397 398 $identity_vat_id = ( 399 isset( self::$site_and_policy_settings['identity_vat_id'] ) && 400 self::$site_and_policy_settings['identity_vat_id'] 401 ) ? self::$site_and_policy_settings['identity_vat_id'] : null; 402 403 $identity_email = ( 404 isset( self::$site_and_policy_settings['identity_email'] ) && 405 self::$site_and_policy_settings['identity_email'] 406 ) ? self::$site_and_policy_settings['identity_email'] : null; 407 408 $identity_name = ( 409 isset( self::$site_and_policy_settings['identity_name'] ) && 410 self::$site_and_policy_settings['identity_name'] 411 ) ? self::$site_and_policy_settings['identity_name'] : null; 412 413 414 $dpo_email = ( 415 $map_dpo_text && 416 isset( self::$site_and_policy_settings['dpo_email'] ) && 417 self::$site_and_policy_settings['dpo_email'] 418 ) ? self::$site_and_policy_settings['dpo_email'] : null; 419 420 $dpo_name = ( 421 $map_dpo_text && 422 isset( self::$site_and_policy_settings['dpo_name'] ) && 423 self::$site_and_policy_settings['dpo_name'] 424 ) ? self::$site_and_policy_settings['dpo_name'] : null; 425 426 $dpo_address = ( 427 $map_dpo_text && 428 isset( self::$site_and_policy_settings['dpo_address'] ) && 429 self::$site_and_policy_settings['dpo_address'] 430 ) ? self::$site_and_policy_settings['dpo_address'] : null; 431 432 385 433 $map_gdpr_text = ( in_array( 'gdpr', $selected_regulations ) ) ? true : false; 434 435 436 //fallback 437 if( 438 !$map_gdpr_text && 439 isset( self::$site_and_policy_settings['completion_percentage'] ) && 440 intval( self::$site_and_policy_settings['completion_percentage'] ) < 80 441 ) 442 { 443 $map_gdpr_text = true; 444 } 445 386 446 $map_gdpr_gb_text = ( $pa && in_array( 'gdpr_gb', $selected_regulations ) ) ? true : false; 387 447 $map_lpd_text = ( $pa && in_array( 'lpd', $selected_regulations ) ) ? true : false; 388 448 $map_pipeda_text = ( $pa && in_array( 'pipeda', $selected_regulations ) ) ? true : false; 389 449 $map_lgpd_text = ( $pa && in_array( 'lgpd', $selected_regulations ) ) ? true : false; 390 391 392 450 $map_ccpa_text = ( $pa && in_array( 'ccpa', $selected_regulations ) ) ? true : false; 393 451 $map_cpa_text = ( $pa && in_array( 'cpa', $selected_regulations ) ) ? true : false; … … 451 509 } 452 510 453 $map_using_contact_forms = self::$site_and_policy_settings['site_features_contact_forms']; 454 $map_accepting_payments = ( $pa && self::$site_and_policy_settings['site_features_payments'] ); 455 $map_account_reg = ( $pa && self::$site_and_policy_settings['site_features_account_reg'] ); 456 $map_using_newsletter = ( $pa && self::$site_and_policy_settings['site_features_newsletter'] ); 457 $map_show_marketing_data_retention = ( $map_using_newsletter && self::$site_and_policy_settings['site_features_show_marketing_data_retention'] ); 458 $map_accepting_reviews = ( $pa && self::$site_and_policy_settings['site_features_reviews_collect'] ); 459 $map_using_minors_data = ( $pa && self::$site_and_policy_settings['site_features_minors_data'] ); 460 $map_using_minors_data_off = ( !self::$site_and_policy_settings['site_features_minors_data'] ) ? true : false; 461 $map_sensitive_data = ( $pa && self::$site_and_policy_settings['site_features_sensitive_data'] ); 462 463 $map_https = self::$site_and_policy_settings['protection_system_https']; 464 $map_log_control = ( $pa && self::$site_and_policy_settings['protection_system_log_control'] ); 465 $map_backup = ( $pa && self::$site_and_policy_settings['protection_system_backup'] ); 466 $map_audit = ( $pa && self::$site_and_policy_settings['protection_system_audit'] ); 467 $map_system_access_limited = ( $pa && self::$site_and_policy_settings['protection_system_access_limited'] ); 511 $map_using_contact_forms = ( 512 isset( self::$site_and_policy_settings['site_features_contact_forms'] ) && 513 self::$site_and_policy_settings['site_features_contact_forms'] 514 ); 515 $map_accepting_payments = ( 516 $pa && 517 isset( self::$site_and_policy_settings['site_features_payments'] ) && 518 self::$site_and_policy_settings['site_features_payments'] 519 ); 520 $map_account_reg = ( 521 $pa && 522 isset( self::$site_and_policy_settings['site_features_account_reg'] ) && 523 self::$site_and_policy_settings['site_features_account_reg'] 524 ); 525 $map_using_newsletter = ( 526 $pa && 527 isset( self::$site_and_policy_settings['site_features_newsletter'] ) && 528 self::$site_and_policy_settings['site_features_newsletter'] 529 ); 530 $map_show_marketing_data_retention = ( 531 $map_using_newsletter && 532 isset( self::$site_and_policy_settings['site_features_show_marketing_data_retention'] ) && 533 self::$site_and_policy_settings['site_features_show_marketing_data_retention'] 534 ); 535 $map_accepting_reviews = ( 536 $pa && 537 isset( self::$site_and_policy_settings['site_features_reviews_collect'] ) && 538 self::$site_and_policy_settings['site_features_reviews_collect'] 539 ); 540 $map_using_minors_data = ( 541 $pa && 542 isset( self::$site_and_policy_settings['site_features_minors_data'] ) && 543 self::$site_and_policy_settings['site_features_minors_data'] 544 ); 545 $map_using_minors_data_off = ( !$map_using_minors_data ) ? true : false; 546 $map_sensitive_data = ( 547 $pa && 548 isset( self::$site_and_policy_settings['site_features_sensitive_data'] ) && 549 self::$site_and_policy_settings['site_features_sensitive_data'] 550 ); 551 552 $map_https = ( 553 isset( self::$site_and_policy_settings['protection_system_https'] ) && 554 self::$site_and_policy_settings['protection_system_https'] 555 ); 556 $map_log_control = ( 557 $pa && 558 isset( self::$site_and_policy_settings['protection_system_log_control'] ) && 559 self::$site_and_policy_settings['protection_system_log_control'] 560 ); 561 $map_backup = ( 562 $pa && 563 isset( self::$site_and_policy_settings['protection_system_backup'] ) && 564 self::$site_and_policy_settings['protection_system_backup'] 565 ); 566 $map_audit = ( 567 $pa && 568 isset( self::$site_and_policy_settings['protection_system_audit'] ) && 569 self::$site_and_policy_settings['protection_system_audit'] 570 ); 571 $map_system_access_limited = ( 572 $pa && 573 isset( self::$site_and_policy_settings['protection_system_access_limited'] ) && 574 self::$site_and_policy_settings['protection_system_access_limited'] 575 ); 468 576 469 577 $map_any_security_measure = false; … … 484 592 $map_transferring_data_to_other_unapproved_countries_array = array(); 485 593 486 if( $pa && self::$site_and_policy_settings['outside_adequate_suppliers'] ) 594 if( $pa && 595 isset( self::$site_and_policy_settings['outside_adequate_suppliers'] ) && 596 self::$site_and_policy_settings['outside_adequate_suppliers'] 597 ) 487 598 { 488 599 foreach( self::$available_countries['not_adequate'] as $k => $v ) … … 558 669 $config = array( 559 670 560 'shortcode_identity_name' => self::$site_and_policy_settings['identity_name'],561 'shortcode_identity_address' => self::$site_and_policy_settings['identity_address'],562 'shortcode_identity_vat_id' => self::$site_and_policy_settings['identity_vat_id'],563 'shortcode_identity_email' => self::$site_and_policy_settings['identity_email'],564 565 'map_identity_name' => self::$site_and_policy_settings['identity_name'],566 'map_identity_address' => self::$site_and_policy_settings['identity_address'],567 'map_identity_vat_id' => self::$site_and_policy_settings['identity_vat_id'],568 'map_identity_email' => self::$site_and_policy_settings['identity_email'],671 'shortcode_identity_name' => $identity_name, 672 'shortcode_identity_address' => $identity_address, 673 'shortcode_identity_vat_id' => $identity_vat_id, 674 'shortcode_identity_email' => $identity_email, 675 676 'map_identity_name' => $identity_name, 677 'map_identity_address' => $identity_address, 678 'map_identity_vat_id' => $identity_vat_id, 679 'map_identity_email' => $identity_email, 569 680 570 681 … … 572 683 'map_dpo_text_unset' => $map_dpo_text_unset, 573 684 574 'shortcode_dpo_email' => ( $map_dpo_text ) 575 ? self::$site_and_policy_settings['dpo_email'] 576 : null, 577 'shortcode_dpo_name' => ( $map_dpo_text ) 578 ? self::$site_and_policy_settings['dpo_name'] 579 : null, 580 'shortcode_dpo_address' => ( $map_dpo_text ) 581 ? self::$site_and_policy_settings['dpo_address'] 582 : null, 583 584 'map_dpo_email' => ( $map_dpo_text && self::$site_and_policy_settings['dpo_email'] ) ? true : false, 585 'map_dpo_name' => ( $map_dpo_text && self::$site_and_policy_settings['dpo_name'] ) ? true : false, 586 'map_dpo_address' => ( $map_dpo_text && self::$site_and_policy_settings['dpo_address'] ) ? true : false, 587 588 589 'map_dpo_other_text' => ( $map_dpo_text && ( self::$site_and_policy_settings['dpo_email'] || 590 self::$site_and_policy_settings['dpo_name'] || 591 self::$site_and_policy_settings['dpo_address'] 592 ) ) ? true : false, 685 'shortcode_dpo_email' => $dpo_email, 686 'shortcode_dpo_name' => $dpo_name, 687 'shortcode_dpo_address' => $dpo_address, 688 'map_dpo_email' => ( 689 $dpo_email 690 ) ? true : false, 691 'map_dpo_name' => ( 692 $dpo_name 693 ) ? true : false, 694 'map_dpo_address' => ( 695 $dpo_address 696 ) ? true : false, 697 698 699 'map_dpo_other_text' => ( $map_dpo_text && 700 ( 701 $dpo_email || 702 $dpo_name || 703 $dpo_address 704 ) 705 ) ? true : false, 593 706 594 707 'map_gdpr_text' => $map_gdpr_text, -
myagileprivacy/trunk/my-agile-privacy.php
r3367575 r3371554 6 6 * Plugin URI: https://www.myagileprivacy.com/ 7 7 * Description: The only WP Privacy Solution you can truly trust — compliant with GDPR, Swiss FADP (nLPD/nFADP), PIPEDA, LGPD, CCPA/CPRA, and 14 other regulations. 8 * Version: 3.2. 08 * Version: 3.2.1 9 9 * Requires at least: 4.4.0 10 10 * Requires PHP: 5.6 … … 17 17 */ 18 18 19 define( 'MAP_PLUGIN_VERSION', '3.2. 0' );19 define( 'MAP_PLUGIN_VERSION', '3.2.1' ); 20 20 define( 'MAP_PLUGIN_NAME', 'my-agile-privacy' ); 21 21 define( 'MAP_PLUGIN_SLUG', 'myagileprivacy' ); -
myagileprivacy/trunk/readme.txt
r3367575 r3371554 1 1 === The only WP Privacy Solution you can truly trust — compliant with GDPR, Swiss FADP (nLPD/nFADP), PIPEDA, LGPD, CCPA/CPRA, and 14 other regulations. === 2 2 Contributors: FormulaAgile 3 Donate link: https://www.myagileprivacy.com/ 3 Donate link: https://www.myagileprivacy.com/en/ 4 4 Tags: GDPR, DSGVO, CCPA/CPRA, privacy cookie banner, Consent Mode v2 5 5 Requires at least: 4.4.0 6 6 Tested up to: 6.8 7 Stable tag: 3.2. 07 Stable tag: 3.2.1 8 8 Requires PHP: 5.6 9 9 License: GPLv3 … … 18 18 It supports **English, Spanish, French, German, Italian, Portuguese, Dutch, Polish, and Greek**. This plugin is one of the **best WordPress plugins for cookie and personal data compliance**, offering a wide range of **easy-to-use features** listed below. My Agile Privacy natively supports **multilingual sites** using **WPML, Polylang, TranslatePress, Weglot**, or **Falang**. 19 19 20 [youtube https://youtu.be/ 2lphC4YTUfM]20 [youtube https://youtu.be/l7960ISPTBw] 21 21 22 22 == Key Features == … … 25 25 - 🚀 Highly customizable 26 26 27 - ⭐Options to accept, reject and revisit consent28 29 - ⚡️Granular user consent30 31 - ⭐Cookie consent and personal data consent management32 33 - 🇺🇸Support for GDPR, Swiss FADP (nLPD/nFADP), PIPEDA, LGPD, CCPA/CPRA, CPA, CTDPA, DPDPA, MCDPA, MTCDPA, NDPA, NRS 603A, NHPA, NJDPA, OCPA, TIPA, TDPSA, UCPA, VCDPA27 - ⚡️ Options to accept, reject and revisit consent 28 29 - ⭐ Granular user consent 30 31 - 🚀 Cookie consent and personal data consent management 32 33 - ⚡️ Support for GDPR, Swiss FADP (nLPD/nFADP), PIPEDA, LGPD, CCPA/CPRA, CPA, CTDPA, DPDPA, MCDPA, MTCDPA, NDPA, NRS 603A, NHPA, NJDPA, OCPA, TIPA, TDPSA, UCPA, VCDPA 34 34 35 35 - ⭐ IAB TCF 2.2 support 36 36 37 - ⭐Google Consent Mode v2 and Microsoft UET Consent Mode support38 39 - ⭐Multilingual support (WPML, Polylang, TranslatePress, Weglot, Falang)37 - 🚀 Google Consent Mode v2 and Microsoft UET Consent Mode support 38 39 - ⚡️ Multilingual support (WPML, Polylang, TranslatePress, Weglot, Falang) 40 40 41 41 == Frequently Asked Questions == … … 80 80 81 81 **Other links:** 82 * [Official Website](https://www.myagileprivacy.com/en/) 83 * [Trustpilot Reviews](https://trustpilot.com/review/myagileprivacy.com) 82 84 * [Facebook Reviews](https://www.facebook.com/MyAgilePrivacy/reviews) 83 * [Trustpilot Reviews](https://trustpilot.com/review/myagileprivacy.com)84 85 85 86 == Installation == … … 99 100 100 101 == Changelog == 102 103 = 3.2.1 104 * Minor bugfix 101 105 102 106 = 3.2.0
Note: See TracChangeset
for help on using the changeset viewer.