Plugin Directory

Changeset 3371554


Ignore:
Timestamp:
10/02/2025 06:38:00 AM (6 months ago)
Author:
formulaagile
Message:

release 3.2.1

Location:
myagileprivacy
Files:
9 edited

Legend:

Unmodified
Added
Removed
  • myagileprivacy/trunk/admin/my-agile-privacy-admin.php

    r3367575 r3371554  
    747747
    748748        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        }
    749754
    750755        $currentAndSupportedLanguages = MyAgilePrivacy::getCurrentAndSupportedLanguages();
     
    31603165
    31613166        // 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        );
    31723180        $last_scan_date_human = '-';
    31733181
  • myagileprivacy/trunk/frontend/js/plain/my-agile-privacy-frontend.js

    r3367575 r3371554  
    77    'plugin_version'                    : null,
    88    'parse_config_version_number'       : null,
    9     'internal_version'                  : "2.0021",
     9    'internal_version'                  : "2.0022",
    1010    'cookie_shield_version'             : null,
    1111    'technology'                        : "plain",
     
    3838    'last_consent_modify_date'          : null,
    3939    'some_positive_consent_given'       : false,
     40    'early_gcmode'                      : false,
    4041};
    4142
     
    758759            if( MAP_SYS.cmode_v2 && MAP_SYS.cmode_v2_implementation_type == 'native' )
    759760            {
    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                    }
    778800                }
    779801
     
    787809                    MAP_SYS.current_gconsent = { ...this_gconsent };
    788810
    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
    795815                }
    796816                else
     
    798818                    that.saveGoogleConsentStatusToCookie( MAP_SYS.current_gconsent );
    799819                }
    800 
    801820            }
    802821
  • myagileprivacy/trunk/frontend/my-agile-privacy-frontend.php

    r3367575 r3371554  
    22592259        }
    22602260
     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
    22612272        $map_full_config = array(
    22622273            'config_origin'                                             =>  'myagileprivacy_native',
     
    22922303            'cmode_v2_js_on_error'                                      =>  null,
    22932304            'shield_added_pattern'                                      =>  $shield_added_pattern,
     2305            'early_gcmode'                                              =>  $early_gcmode,
    22942306        );
    22952307
     
    23872399                }
    23882400
    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
    23982415            }
    23992416
  • myagileprivacy/trunk/includes/my-agile-privacy-class.php

    r3367575 r3371554  
    637637        if( !empty( self::$stored_options ) )
    638638        {
     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
    639648            foreach( self::$stored_options as $key => $option )
    640649            {
     
    825834                case 'fixed_translations_encoded':
    826835                case 'layer_1_button_order':
     836                case 'site_and_policy_settings':
    827837                    $logic = 'raw';
    828838                    break;
     
    13331343        );
    13341344
    1335 
    1336         $settings = apply_filters( 'map_plugin_settings', $settings);
     1345        $settings = apply_filters( 'map_plugin_settings', $settings );
    13371346
    13381347        return $key != "" ? $settings[ $key ] : $settings;
  • myagileprivacy/trunk/includes/my-agile-privacy-regulation-helper.php

    r3367575 r3371554  
    204204        $regulation_config = array();
    205205
    206         $to_add_keys = array(
    207         );
     206        $to_add_keys = array();
    208207
    209208        foreach( self::$available_regulations as $item )
     
    246245        if( isset( self::$site_and_policy_settings['base_location'] ) )
    247246        {
    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' )
    249249            {
    250250                foreach( self::$available_countries['usa_sub_list'] as $usa_item )
     
    379379        $pa = ( isset( self::$the_settings['pa'] ) && self::$the_settings['pa'] == 1 );
    380380
    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;
    382385
    383386        $map_dpo_text_unset = ( !$map_dpo_text ) ? true : false;
    384387
     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
    385433        $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
    386446        $map_gdpr_gb_text = ( $pa && in_array( 'gdpr_gb', $selected_regulations ) ) ? true : false;
    387447        $map_lpd_text = ( $pa && in_array( 'lpd', $selected_regulations ) ) ? true : false;
    388448        $map_pipeda_text = ( $pa && in_array( 'pipeda', $selected_regulations ) ) ? true : false;
    389449        $map_lgpd_text = ( $pa && in_array( 'lgpd', $selected_regulations ) ) ? true : false;
    390 
    391 
    392450        $map_ccpa_text = ( $pa && in_array( 'ccpa', $selected_regulations ) ) ? true : false;
    393451        $map_cpa_text = ( $pa && in_array( 'cpa', $selected_regulations ) ) ? true : false;
     
    451509        }
    452510
    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                                    );
    468576
    469577        $map_any_security_measure = false;
     
    484592        $map_transferring_data_to_other_unapproved_countries_array = array();
    485593
    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        )
    487598        {
    488599            foreach( self::$available_countries['not_adequate'] as $k => $v )
     
    558669        $config = array(
    559670
    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,
    569680
    570681
     
    572683            'map_dpo_text_unset'                    =>  $map_dpo_text_unset,
    573684
    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,
    593706
    594707            'map_gdpr_text'                         =>  $map_gdpr_text,
  • myagileprivacy/trunk/my-agile-privacy.php

    r3367575 r3371554  
    66 * Plugin URI:        https://www.myagileprivacy.com/
    77 * 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.0
     8 * Version:           3.2.1
    99 * Requires at least: 4.4.0
    1010 * Requires PHP:      5.6
     
    1717 */
    1818
    19 define( 'MAP_PLUGIN_VERSION', '3.2.0' );
     19define( 'MAP_PLUGIN_VERSION', '3.2.1' );
    2020define( 'MAP_PLUGIN_NAME', 'my-agile-privacy' );
    2121define( 'MAP_PLUGIN_SLUG', 'myagileprivacy' );
  • myagileprivacy/trunk/readme.txt

    r3367575 r3371554  
    11=== The only WP Privacy Solution you can truly trust — compliant with GDPR, Swiss FADP (nLPD/nFADP), PIPEDA, LGPD, CCPA/CPRA, and 14 other regulations. ===
    22Contributors: FormulaAgile
    3 Donate link: https://www.myagileprivacy.com/
     3Donate link: https://www.myagileprivacy.com/en/
    44Tags: GDPR, DSGVO, CCPA/CPRA, privacy cookie banner, Consent Mode v2
    55Requires at least: 4.4.0
    66Tested up to: 6.8
    7 Stable tag: 3.2.0
     7Stable tag: 3.2.1
    88Requires PHP: 5.6
    99License: GPLv3
     
    1818It 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**.
    1919
    20 [youtube https://youtu.be/2lphC4YTUfM]
     20[youtube https://youtu.be/l7960ISPTBw]
    2121
    2222== Key Features ==
     
    2525- 🚀 Highly customizable
    2626
    27 - 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
     27- ⚡️ 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
    3434
    3535- ⭐ IAB TCF 2.2 support
    3636
    37 - Google Consent Mode v2 and Microsoft UET Consent Mode support
    38 
    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)
    4040
    4141== Frequently Asked Questions ==
     
    8080
    8181**Other links:**
     82* [Official Website](https://www.myagileprivacy.com/en/)
     83* [Trustpilot Reviews](https://trustpilot.com/review/myagileprivacy.com)
    8284* [Facebook Reviews](https://www.facebook.com/MyAgilePrivacy/reviews)
    83 * [Trustpilot Reviews](https://trustpilot.com/review/myagileprivacy.com)
    8485
    8586== Installation ==
     
    99100
    100101== Changelog ==
     102
     103= 3.2.1
     104* Minor bugfix
    101105
    102106= 3.2.0
Note: See TracChangeset for help on using the changeset viewer.