Plugin Directory

Changeset 3498092


Ignore:
Timestamp:
04/03/2026 09:46:00 AM (2 days ago)
Author:
DaanvandenBergh
Message:

Update to version 1.3.0 from GitHub

Location:
gdpr-press
Files:
88 added
12 deleted
17 edited
1 copied

Legend:

Unmodified
Added
Removed
  • gdpr-press/assets/banner-1544x500.png

    • Property svn:mime-type changed from application/octet-stream to image/png
  • gdpr-press/assets/banner-772x250.png

    • Property svn:mime-type changed from application/octet-stream to image/png
  • gdpr-press/assets/icon-256x256.png

    • Property svn:mime-type changed from application/octet-stream to image/png
  • gdpr-press/assets/icon-512x512.png

    • Property svn:mime-type changed from application/octet-stream to image/png
  • gdpr-press/assets/screenshot-1.png

    • Property svn:mime-type changed from application/octet-stream to image/png
  • gdpr-press/assets/screenshot-2.png

    • Property svn:mime-type changed from application/octet-stream to image/png
  • gdpr-press/assets/screenshot-3.png

    • Property svn:mime-type changed from application/octet-stream to image/png
  • gdpr-press/assets/screenshot-4.png

    • Property svn:mime-type changed from application/octet-stream to image/png
  • gdpr-press/assets/screenshot-5.png

    • Property svn:mime-type changed from application/octet-stream to image/png
  • gdpr-press/tags/1.3.0/assets/css/gdpress-admin.css

    r2689051 r3498092  
    22 * @package   GDPRess
    33 * @author    Daan van den Bergh
    4  *            https://ffw.press
    5  */
    6 #gdpress-help-form {
    7   max-width: 1350px;
    8 }
    9 #gdpress-manage-form {
    10   max-width: 1350px;
    11 }
    12 #gdpress-manage-form .gdpress.manage {
    13   padding: 25px 50px;
    14   max-width: 1024px;
    15   margin: 20px auto 20px 220px;
    16   overflow: visible;
    17   position: relative;
    18 }
    19 #gdpress-manage-form .gdpress.manage p {
    20   text-align: center;
    21 }
    22 #gdpress-manage-form .gdpress.manage .option-title {
    23   position: absolute;
    24   left: -220px;
    25   top: 0;
    26   font-weight: 600;
    27   font-size: 14px;
    28   color: #1d2327;
    29 }
    30 #gdpress-manage-form .gdpress.manage .tooltip {
    31   position: relative;
    32   font-size: 16px;
    33   line-height: 20px;
    34 }
    35 #gdpress-manage-form .gdpress.manage .tooltip .tooltip-text {
    36   visibility: hidden;
    37   position: absolute;
    38   top: 100%;
    39   left: 100%;
    40   z-index: 10000;
    41   background-color: rgba(0, 0, 0, 0.75);
    42   font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif;
    43   font-size: 0.8em;
    44   color: #fff;
    45   line-height: 1.5;
    46   width: 250px;
    47   padding: 10px;
    48   margin-left: -125px;
    49   border-radius: 3px;
    50 }
    51 #gdpress-manage-form .gdpress.manage .tooltip .tooltip-text a {
    52   color: white;
    53 }
    54 #gdpress-manage-form .gdpress.manage .tooltip:hover .tooltip-text {
    55   visibility: visible;
    56 }
    57 #gdpress-manage-form .gdpress.manage table {
    58   width: 100%;
    59   max-width: 1024px;
    60   border-collapse: collapse;
    61 }
    62 #gdpress-manage-form .gdpress.manage table td,
    63 #gdpress-manage-form .gdpress.manage table th {
    64   line-height: 2.5;
    65   padding: 6px 12px;
    66 }
    67 #gdpress-manage-form .gdpress.manage table td.title,
    68 #gdpress-manage-form .gdpress.manage table th.title {
    69   padding: 0;
    70   line-height: 1;
    71   border-bottom: 1px solid #c3c4c7;
    72 }
    73 #gdpress-manage-form .gdpress.manage table td.downloaded,
    74 #gdpress-manage-form .gdpress.manage table th.downloaded,
    75 #gdpress-manage-form .gdpress.manage table td.exclude,
    76 #gdpress-manage-form .gdpress.manage table th.exclude {
    77   max-width: 25px;
    78 }
    79 #gdpress-manage-form .gdpress.manage table td.downloaded i,
    80 #gdpress-manage-form .gdpress.manage table th.downloaded i,
    81 #gdpress-manage-form .gdpress.manage table td.exclude i,
    82 #gdpress-manage-form .gdpress.manage table th.exclude i {
    83   vertical-align: -5px;
    84 }
    85 #gdpress-manage-form .gdpress.manage table td.downloaded i.dashicons-yes,
    86 #gdpress-manage-form .gdpress.manage table th.downloaded i.dashicons-yes,
    87 #gdpress-manage-form .gdpress.manage table td.exclude i.dashicons-yes,
    88 #gdpress-manage-form .gdpress.manage table th.exclude i.dashicons-yes {
    89   color: #2ECC40;
    90 }
    91 #gdpress-manage-form .gdpress.manage table td.downloaded i.dashicons-info-outline,
    92 #gdpress-manage-form .gdpress.manage table th.downloaded i.dashicons-info-outline,
    93 #gdpress-manage-form .gdpress.manage table td.exclude i.dashicons-info-outline,
    94 #gdpress-manage-form .gdpress.manage table th.exclude i.dashicons-info-outline {
    95   color: #201e14;
    96 }
    97 #gdpress-manage-form .gdpress.manage table td.downloaded input,
    98 #gdpress-manage-form .gdpress.manage table th.downloaded input,
    99 #gdpress-manage-form .gdpress.manage table td.exclude input,
    100 #gdpress-manage-form .gdpress.manage table th.exclude input {
    101   vertical-align: -3px;
    102 }
    103 #gdpress-manage-form .gdpress.manage table td.name,
    104 #gdpress-manage-form .gdpress.manage table th.name {
    105   display: inline-block;
    106   white-space: nowrap;
    107   overflow: hidden;
    108   text-overflow: ellipsis;
    109   max-width: 250px;
    110   width: 15%;
    111 }
    112 #gdpress-manage-form .gdpress.manage table td.href,
    113 #gdpress-manage-form .gdpress.manage table th.href {
    114   display: inline-block;
    115   white-space: nowrap;
    116   overflow: hidden;
    117   text-overflow: ellipsis;
    118   max-width: 362px;
    119   width: 35%;
    120 }
    121 #gdpress-manage-form .gdpress.manage table td.href a,
    122 #gdpress-manage-form .gdpress.manage table th.href a {
    123   text-decoration: none;
    124   color: #3c434a;
    125 }
    126 #gdpress-manage-form .gdpress.manage table tbody th {
    127   text-align: left;
    128 }
    129 #gdpress-manage-form .gdpress.manage table tbody tr.even {
    130   background-color: #f0f0f1;
    131 }
    132 #gdpress-manage-form .gdpress.manage table tbody tr.info {
    133   background-color: #C2EEFF;
    134 }
    135 #gdpress-manage-form .gdpress.manage table tbody tr.warning {
    136   background-color: #FFEF87;
    137 }
    138 #gdpress-manage-form .button-cancel {
    139   color: #a00;
    140   text-decoration: none;
    141   border-color: transparent;
    142   box-shadow: none;
    143   background: 0 0;
    144   border-radius: 3px;
    145   white-space: nowrap;
    146   padding: 1px 10px !important;
    147 }
    148 #gdpress-manage-form .button-cancel:hover {
    149   cursor: pointer;
    150   background: #d54e21;
    151   color: #fff;
    152   border-color: #d54e21;
    153 }
    154 #gdpress-help-form .postbox {
    155   padding: 0 15px 5px;
    156 }
    157 #gdpress-help-form .postbox .column-container {
    158   display: flex;
    159   flex-flow: row wrap;
    160   justify-content: space-between;
    161 }
    162 #gdpress-help-form .postbox .column-container .column ul li {
    163   margin-bottom: 10px;
    164 }
    165 #gdpress-help-form .postbox .column-container .column ul li:last-child {
    166   margin-bottom: none;
    167 }
    168 #gdpress-help-form .postbox .column-container .column ul li a {
    169   text-decoration: none;
    170   line-height: 1.45;
    171 }
    172 #gdpress-help-form .postbox .column-container .column ul li a i.dashicons {
    173   margin-right: 5px;
    174   color: #646970;
    175 }
    176 #gdpress-help-form .postbox .column-container .column.last {
    177   margin-right: 45px;
    178 }
    179 #gdpress-help-form .postbox .column-container .column.last .signature {
    180   text-align: center;
    181 }
    182 #gdpress-help-form .postbox .column-container .column.last .signature .dashicons-heart {
    183   color: #FF4136;
    184 }
     4 *            https://daan.dev
     5 */
     6
     7/**
     8 * Typography
     9 */
     10@import "gdpr-press-admin-google-fonts.min.css";
     11
     12#wpwrap {
     13    background-color: rgb(248 250 252 / 1);
     14}
     15
     16.gdpress {
     17    font-family: "Public Sans", Arial, sans-serif;
     18    max-width: 1350px;
     19}
     20
     21.gdpress h1 {
     22    font-family: Poppins, Verdana, sans-serif;
     23    font-weight: 800;
     24}
     25
     26.gdpress h2,
     27.gdpress h3,
     28.gdpress h4,
     29.gdpress h5,
     30.gdpress h6 {
     31    font-family: Poppins, Verdana, sans-serif;
     32    font-weight: 600;
     33}
     34
     35/**
     36 * Buttons
     37 */
     38.gdpress .button {
     39    color: #00adda;
     40    font-family: Poppins, Verdana, sans-serif;
     41    border-radius: 10px;
     42    border: none;
     43    font-weight: 500;
     44    padding: 7px 20px;
     45    margin-right: 1em;
     46    background-color: transparent;
     47}
     48
     49.gdpress .button:hover {
     50    background-color: transparent;
     51}
     52
     53.gdpress .button-primary {
     54    color: white;
     55    background-color: #00adda;
     56}
     57
     58.gdpress .button-primary:hover {
     59    background-color: #09c;
     60}
     61
     62.gdpress .button-cancel {
     63    color: #a00;
     64    text-decoration: none;
     65    border-color: transparent;
     66    box-shadow: none;
     67    background: 0 0;
     68    white-space: nowrap;
     69}
     70
     71.gdpress .button-cancel:hover {
     72    cursor: pointer;
     73    background: #d54e21;
     74    color: #fff;
     75    border-color: #d54e21;
     76    border-radius: 10px;
     77}
     78
     79.gdpress #submit {
     80    background: #00adda;
     81    border: 0;
     82    color: #fff;
     83    cursor: pointer;
     84}
     85
     86.gdpress #submit:hover {
     87    background-color: #0099cc;
     88}
     89
     90/**
     91 * Navigation
     92 */
     93.gdpress h2.gdpress-nav {
     94    border-bottom: 0;
     95    padding-bottom: 3px;
     96}
     97
     98.gdpress h2.gdpress-nav a {
     99    border: 0;
     100    background-color: transparent;
     101    font-weight: 600;
     102    box-shadow: none;
     103}
     104
     105.gdpress h2.gdpress-nav .nav-tab {
     106    color: #000;
     107}
     108
     109.gdpress h2.gdpress-nav .nav-tab:last-child {
     110    float: right;
     111}
     112
     113.gdpress h2.gdpress-nav .nav-tab-active {
     114    color: #00adda;
     115}
     116
     117.gdpress h2.gdpress-nav .nav-tab:hover {
     118    color: #00adda;
     119}
     120
     121.gdpress-nav .dashicons-before:before {
     122    margin-right: 0.25em;
     123    line-height: 1.15em;
     124}
     125
     126.gdpress form {
     127    max-width: 1350px;
     128}
     129
     130.gdpress form .dashicons {
     131    line-height: 15px;
     132}
     133
     134/**
     135 * Containers
     136 */
     137.gdpress-manage-container,
     138.gdpress-settings-container,
     139.gdpress-help-container {
     140    padding: 5px 25px 25px;
     141    margin-bottom: 30px;
     142    box-shadow: 0 10px 20px 1px #ccc;
     143    border: 0;
     144    border-top: 4px solid #00adda;
     145    border-radius: 10px;
     146    background: #fff;
     147}
     148
     149.gdpress-manage-container .option-title {
     150    display: none;
     151}
     152
     153.gdpress-container {
     154    margin-top: 1.5em;
     155}
     156
     157.gdpress-container p {
     158    text-align: center;
     159    margin-bottom: 2em;
     160}
     161
     162/**
     163 * Table styles (Preserved)
     164 */
     165.gdpress-manage-container table {
     166    width: 100%;
     167    border-collapse: collapse;
     168}
     169
     170.gdpress-manage-container table td,
     171.gdpress-manage-container table th {
     172    line-height: 2.5;
     173    padding: 6px 12px;
     174}
     175
     176.gdpress-manage-container table .gdpress-manage-cache {
     177    border-top: 1px solid #c3c4c7;
     178}
     179
     180.gdpress-manage-container table .gdpress-manage-cache th {
     181    font-size: 14px;
     182    color: #1d2327;
     183    padding: 0;
     184}
     185
     186.gdpress-manage-container table td.title,
     187.gdpress-manage-container table th.title {
     188    padding: 0;
     189    line-height: 1;
     190    border-top: 1px solid #c3c4c7;
     191}
     192
     193.gdpress-manage-container table td.downloaded,
     194.gdpress-manage-container table th.downloaded,
     195.gdpress-manage-container table td.exclude,
     196.gdpress-manage-container table th.exclude {
     197    max-width: 25px;
     198}
     199
     200.gdpress-manage-container table td.downloaded i,
     201.gdpress-manage-container table th.downloaded i,
     202.gdpress-manage-container table td.exclude i,
     203.gdpress-manage-container table th.exclude i {
     204    vertical-align: -5px;
     205}
     206
     207.gdpress-manage-container table td.downloaded i.dashicons-yes,
     208.gdpress-manage-container table td.exclude i.dashicons-yes {
     209    color: #2ECC40;
     210}
     211
     212.gdpress-manage-container table td.downloaded i.dashicons-info-outline,
     213.gdpress-manage-container table td.exclude i.dashicons-info-outline {
     214    color: #201e14;
     215}
     216
     217.gdpress-manage-container table td.downloaded input,
     218.gdpress-manage-container table td.exclude input {
     219    vertical-align: -3px;
     220}
     221
     222.gdpress-manage-container table td.name,
     223.gdpress-manage-container table th.name {
     224    display: inline-block;
     225    white-space: nowrap;
     226    overflow: hidden;
     227    text-overflow: ellipsis;
     228    max-width: 250px;
     229    width: 15%;
     230}
     231
     232.gdpress-manage-container table td.href,
     233.gdpress-manage-container table th.href {
     234    display: inline-block;
     235    white-space: nowrap;
     236    overflow: hidden;
     237    text-overflow: ellipsis;
     238    max-width: 362px;
     239    width: 35%;
     240}
     241
     242.gdpress-manage-container table td.href a {
     243    text-decoration: none;
     244    color: #3c434a;
     245}
     246
     247.gdpress-manage-container table tbody th {
     248    text-align: left;
     249}
     250
     251.gdpress-manage-container table tbody tr.even {
     252    background-color: #f0f0f1;
     253}
     254
     255/* Blue highlighted rows for Google Fonts upsell */
     256.gdpress-manage-container table tbody tr.info {
     257    background-color: #C2EEFF;
     258}
     259
     260/* Yellow highlighted rows for denylisted resources */
     261.gdpress-manage-container table tbody tr.warning {
     262    background-color: #FFEF87;
     263}
     264
     265/**
     266 * Tooltip
     267 */
     268.gdpress-manage-container .tooltip {
     269    position: relative;
     270    font-size: 16px;
     271    line-height: 20px;
     272}
     273
     274.gdpress-manage-container .tooltip .tooltip-text {
     275    visibility: hidden;
     276    position: absolute;
     277    top: 100%;
     278    left: 100%;
     279    z-index: 10000;
     280    background-color: rgba(0, 0, 0, 0.75);
     281    font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif;
     282    font-size: 0.8em;
     283    color: #fff;
     284    line-height: 1.5;
     285    width: 250px;
     286    padding: 10px;
     287    margin-left: -30px;
     288    border-radius: 3px;
     289}
     290
     291.gdpress-manage-container .tooltip .tooltip-text a {
     292    color: white;
     293}
     294
     295.gdpress-manage-container .tooltip:hover .tooltip-text {
     296    visibility: visible;
     297}
     298
     299/**
     300 * Help Tab Specific
     301 */
     302.gdpress-help-container .postbox {
     303    padding: 0;
     304    box-shadow: none;
     305    border: 0;
     306}
     307
     308.gdpress-help-container .column-container {
     309    display: flex;
     310    flex-flow: row wrap;
     311    justify-content: space-between;
     312}
     313
     314.gdpress-help-container .column ul li {
     315    margin-bottom: 10px;
     316}
     317
     318.gdpress-help-container .column ul li a {
     319    text-decoration: none;
     320    line-height: 1.45;
     321}
     322
     323.gdpress-help-container .column ul li a i.dashicons {
     324    margin-right: 5px;
     325    color: #646970;
     326}
     327
     328.gdpress-help-container .column.last {
     329    margin-right: 45px;
     330}
     331
     332.gdpress-help-container .column.last .signature {
     333    text-align: center;
     334}
     335
     336.gdpress-help-container .column.last .signature-image {
     337    width: 185px;
     338}
     339
    185340/**
    186341 * Loader
    187342 */
    188343.gdpress-loading {
    189   position: fixed;
    190   background-color: rgba(255, 255, 255, 0.6);
    191   width: 100%;
    192   height: 100%;
    193   top: 0;
    194   left: 0;
    195   text-align: center;
    196 }
     344    position: fixed;
     345    background-color: rgba(255, 255, 255, 0.6);
     346    width: 100%;
     347    height: 100%;
     348    top: 0;
     349    left: 0;
     350    text-align: center;
     351}
     352
    197353.gdpress-loading .spinner {
    198   top: 50%;
    199   left: 50%;
    200   position: absolute;
    201   -ms-transform: translateX(-50%);
    202   transform: translateX(-50%);
    203 }
    204 /**
    205  * Welcome Block
    206  */
     354    top: 50%;
     355    left: 50%;
     356    position: absolute;
     357    -ms-transform: translateX(-50%);
     358    transform: translateX(-50%);
     359}
     360
    207361#footer-thankyou a {
    208   vertical-align: -0.65em;
    209 }
     362    vertical-align: -0.65em;
     363}
     364
    210365#footer-thankyou .dashicons.ffwp-heart {
    211   vertical-align: middle;
    212 }
    213 #footer-thankyou .dashicons.ffwp-heart:before {
    214   color: #FF4136;
    215 }
     366    vertical-align: middle;
     367    color: #FF4136;
     368}
     369
    216370#footer-thankyou .signature-image {
    217   width: 96px;
    218 }
     371    width: 96px;
     372}
     373
    219374/*# sourceMappingURL=./gdpress-admin.css.map */
  • gdpr-press/tags/1.3.0/assets/js/gdpress-admin.js

    r2679157 r3498092  
    22 * @package   GDPRess
    33 * @author    Daan van den Bergh
    4  *            https://ffw.press
     4 *            https://daan.dev
    55 */
    66jQuery(document).ready(function ($) {
  • gdpr-press/tags/1.3.0/gdpr-press.php

    r2780136 r3498092  
    11<?php
    2 defined('ABSPATH') || exit;
    32/**
    43 * Plugin Name: GDPRess
    54 * Plugin URI: https://wordpress.org/plugins/gdpr-press/
    65 * Description: Easily eliminate external requests with GDPRess.
    7  * Version: 1.2.3
    8  * Author: Daan from FFW.Press
    9  * Author URI: https://ffw.press
     6 * Version: 1.3.0
     7 * Author: Daan from Daan.dev
     8 * Author URI: https://daan.dev
    109 * License: GPL2v2 or later
    1110 * Text Domain: gdpr-press
    1211 */
    1312
    14 define('GDPRESS_PLUGIN_DIR', plugin_dir_path(__FILE__));
    15 define('GDPRESS_PLUGIN_FILE', __FILE__);
    16 define('GDPRESS_PLUGIN_BASENAME', plugin_basename(GDPRESS_PLUGIN_FILE));
    17 define('GDPRESS_STATIC_VERSION', '1.2.0');
    18 define('GDPRESS_DB_VERSION', '1.0.2');
     13defined( 'ABSPATH' ) || exit;
     14
     15define( 'GDPRESS_PLUGIN_DIR', plugin_dir_path( __FILE__ ) );
     16define( 'GDPRESS_PLUGIN_FILE', __FILE__ );
     17define( 'GDPRESS_PLUGIN_BASENAME', plugin_basename( GDPRESS_PLUGIN_FILE ) );
     18define( 'GDPRESS_STATIC_VERSION', '1.2.0' );
     19define( 'GDPRESS_DB_VERSION', '1.0.2' );
    1920
    2021/**
     
    2526 * @return mixed|void
    2627 */
    27 function gdpress_autoload($class)
    28 {
    29     $path = explode('_', $class);
    30 
    31     if ($path[0] != 'Gdpress') {
    32         return;
    33     }
    34 
    35     if (!class_exists('FFWP_Autoloader')) {
    36         require_once(GDPRESS_PLUGIN_DIR . 'ffwp-autoload.php');
    37     }
    38 
    39     $autoload = new FFWP_Autoloader($class);
    40 
    41     return include GDPRESS_PLUGIN_DIR . 'includes/' . $autoload->load();
    42 }
    43 
    44 spl_autoload_register('gdpress_autoload');
     28require_once GDPRESS_PLUGIN_DIR . 'vendor/autoload.php';
    4529
    4630/**
    4731 * All systems GO!!!
    4832 *
    49  * @return Gdpress
     33 * @return GDPRess\Plugin
    5034 */
    51 function gdpr_press_init()
    52 {
    53     static $gdpress = null;
    54 
    55     if ($gdpress === null) {
    56         $gdpress = new Gdpress();
    57     }
    58 
    59     return $gdpress;
    60 }
    61 
    62 gdpr_press_init();
     35$gdpress = new GDPRess\Plugin();
  • gdpr-press/tags/1.3.0/readme.txt

    r2780136 r3498092  
    11=== GDPRess | Eliminate external requests to increase GDPR compliance ===
    22Contributors: DaanvandenBergh
    3 Tags: gdpr, dsvgo, avg, external, 3rd party, requests, minimize
    4 Requires at least: 5.8
    5 Tested up to: 5.9
    6 Stable tag: 1.2.3
     3Tags: gdpr, dsgvo, avg, external, 3rd party, requests, minimize
     4Requires at least: 5.9
     5Tested up to: 6.9
     6Stable tag: 1.3.0
    77Requires PHP: 7.2
    88License: GPLv2 or later
     
    1111== Description ==
    1212
    13 In January, 2022 [a German court ruled](https://ffw.press/blog/gdpr/google-fonts-violates-gdpr-germany/) that a website owner was in breach of GDPR and should pay a € 100,- fine, because embedded Google Fonts were used, essentially transferring the user's personal data (IP address) without the user's prior consent.
     13**GDPRess can be downloaded for free without any paid subscription from [the official WordPress repository](https://wordpress.org/plugins/gdpr-press/).**
     14
     15In January 2022 [a German court ruled](https://daan.dev/blog/gdpr/google-fonts-violates-gdpr-germany/) that a website owner was in breach of GDPR and should pay a € 100,- fine, because embedded Google Fonts were used, essentially transferring the user's personal data (IP address) without the user's prior consent.
    1416
    1517= What's embedding? =
    1618
    17 When an external (i.e. loaded from another server, besides your own) resource is embedded into a webpage, it basically means that the resource behaves as if it's loaded from the same server hosting the webpage.
     19When an external (i.e., loaded from another server, besides your own) resource is embedded into a webpage, it basically means that the resource behaves as if it's loaded from the same server hosting the webpage.
    1820
    1921= Why is using embedded resources in breach of GDPR? =
    2022
    21 Because of [the way the internet works](https://ffw.press/blog/how-to/google-fonts-gdpr/). When a browser (i.e. computer) requests a file (e.g. an image or a font file), the server needs the IP address of that computer to send it back. All these requests (including the IP address) are logged in a so-called `access.log`.
     23Because of [the way the internet works](https://daan.dev/blog/how-to/google-fonts-gdpr/#h-how-the-internet-works). When a browser (i.e., computer) requests a file (e.g., an image or a font file), the server needs the IP address of that computer to send it back. All these requests (including the IP address) are logged in a so-called `access.log`.
    2224
    2325Once this IP address leaves the European Union, your website is violating the GDPR.
     
    2527= What does this plugin do? =
    2628
    27 GDPRess scans your homepage for 3rd party scripts (JS) and stylesheets (CSS), and:
     29GDPRess scans your homepage for third party scripts (JS) and stylesheets (CSS), and:
    2830
    29 * Allows you to download or exclude them from downloading,
    30 * Parses the stylesheets for loaded font files, downloads them, and rewrites the stylesheet to use the local copies,
     31* Allows you to download or exclude them from downloading.
     32* Parses the stylesheets for loaded font files, downloads them, and rewrites the stylesheet to use the local copies.
    3133* Makes sure the local copies of each script/stylesheet are used in your site's frontend.
    3234
     
    3537== Installation ==
    3638
    37 1. Upload the plugin files to the `/wp-content/plugins/gdpr-press` directory, or install the plugin through the WordPress plugins screen directly.
     391. Upload the plugin files to the `/wp-content/plugins/gdpr-press` directory or install the plugin through WordPress Plugins screen directly.
    38402. Activate the plugin through the 'Plugins' screen in WordPress
    39413. Use the Settings -> GDPRess screen to configure the plugin
     
    5153= Will this plugin allow me to use Google Analytics in compliance with GDPR? =
    5254
    53 No, because much more is needed than *just* downloading analytics.js/gtag.js to your server. To [use Google Analytics in compliance with GDPR](https://ffw.press/blog/gdpr/google-analytics-compliance-gdpr/), you need [CAOS Pro](https://ffw.press/wordpress/caos-pro/).
     55No, because much more is needed than *just* downloading analytics.js/gtag.js to your server. To [use Google Analytics in compliance with GDPR](https://daan.dev/blog/gdpr/google-analytics-compliance-gdpr/), you need [CAOS Pro](https://daan.dev/wordpress/caos-pro/).
    5456
    5557== Screenshots ==
    5658
    57 1. GDPRess' Start screen, simply click Scan Website to start.
    58 2. After running the initial scan, external requests are listed. Exclude a file when e.g. you suspect it might not work properly when it's downloaded.
    59 3. Google Analytics is automatically excluded, because simply downloading the file is not enough to use it in compliance with GDPR. Click on the link in the tooltip for more information.
    60 4. Google Fonts is supported, but when many font families and/or font styles are detected, GDPRess will offer an alternative approach to optimize the request.
     591. GDPRess' Start screen, click Scan Website to start.
     602. After running the initial scan, external requests are listed. Exclude a file when e.g., you suspect it might not work properly when it's downloaded.
     613. Google Analytics is automatically excluded because simply downloading the file is not enough to use it in compliance with GDPR. Click on the link in the tooltip for more information.
     624. Google Fonts are supported, but when many font families and/or font styles are detected, GDPRess will offer an alternative approach to optimize the request.
    61635. When the selected files are downloaded, the URLs of the local copies are listed.
    6264
    6365== Changelog ==
     66
     67= 1.3.0 | The "He is risen!" Release =
     68* Added: Admin bar menu with "Scan this page" option to trigger a scan on the current page.
     69* Added: An exclusion list — known resources that break when locally hosted (e.g., Google Analytics, Stripe.js, Usercentrics) are now automatically excluded, with a tooltip explaining why.
     70* Added: Google Fonts and Web Font Loader requests are highlighted with a suggestion to use OMGF (Pro) for more advanced optimization.
     71* Added: Web Font Loader (`webfont.js`) is now detected and downloaded locally.
     72* Improved: "Re-scan" button replaces "Scan again" — clears the cache and rescans in one click.
     73* Improved: Settings page restyled to match the look and feel of other Daan.dev plugins.
     74* Improved: "Save Changes & Download" renamed to "Process Changes" — also deletes locally hosted files for excluded resources.
     75* Fixed: Protocol-relative URLs (`//`) are now correctly detected as external resources.
     76* Fixed: Non-external URI schemes (`data:`, `blob:`, `javascript:`) are no longer mistakenly processed.
     77* Fixed: CSS paths are now correctly rewritten after a stylesheet is downloaded.
     78* Fixed: Test Mode can now always be toggled.
     79* Tested up to WordPress 6.9.
    6480
    6581= 1.2.3 =
     
    6783
    6884= 1.2.2 =
    69 * Fixed: GDPRess now runs before OMGF/CAOS, so e.g. OMGF Pro can optimize previously externally hosted stylesheets.
     85* Fixed: GDPRess now runs before OMGF/CAOS, so e.g., OMGF Pro can optimize previously externally hosted stylesheets.
    7086
    7187= 1.2.1 =
     
    7490
    7591= 1.2.0 =
    76 * Added: Run a quick scan on each page to see if new external (3rd party) requests are present on that page!
     92* Added: Run a quick scan on each page to see if new external (third party) requests are present on that page!
    7793* Added: Test Mode (enabled by Default) to allow users to first test the optimizations before releasing them to the public.
    7894* Fixed: Don't use WP_Filesystem to get and put file contents.
     
    8197* Added: Google Fonts support
    8298  - When many Font Families or Font Styles are detected, GDPR Press will suggest to use OMGF to optimize the request before downloading it.
    83 * Fixed several bugs, notices and warnings.
     99* Fixed several bugs, notices, and warnings.
    84100
    85101= 1.0.2 =
    86 * Added: tooltip next to success message.
     102* Added: tooltip next to a success message.
    87103* Fixed: tooltip-icon line height.
    88104
    89105= 1.0.1 =
    90 * Fixed: Conflicts with several caching/optimization plugins:
     106* Fixed: Conflicts with some caching/optimization plugins:
    91107  - Autoptimize
    92108  - WP Rocket
  • gdpr-press/trunk/assets/css/gdpress-admin.css

    r2689051 r3498092  
    22 * @package   GDPRess
    33 * @author    Daan van den Bergh
    4  *            https://ffw.press
    5  */
    6 #gdpress-help-form {
    7   max-width: 1350px;
    8 }
    9 #gdpress-manage-form {
    10   max-width: 1350px;
    11 }
    12 #gdpress-manage-form .gdpress.manage {
    13   padding: 25px 50px;
    14   max-width: 1024px;
    15   margin: 20px auto 20px 220px;
    16   overflow: visible;
    17   position: relative;
    18 }
    19 #gdpress-manage-form .gdpress.manage p {
    20   text-align: center;
    21 }
    22 #gdpress-manage-form .gdpress.manage .option-title {
    23   position: absolute;
    24   left: -220px;
    25   top: 0;
    26   font-weight: 600;
    27   font-size: 14px;
    28   color: #1d2327;
    29 }
    30 #gdpress-manage-form .gdpress.manage .tooltip {
    31   position: relative;
    32   font-size: 16px;
    33   line-height: 20px;
    34 }
    35 #gdpress-manage-form .gdpress.manage .tooltip .tooltip-text {
    36   visibility: hidden;
    37   position: absolute;
    38   top: 100%;
    39   left: 100%;
    40   z-index: 10000;
    41   background-color: rgba(0, 0, 0, 0.75);
    42   font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif;
    43   font-size: 0.8em;
    44   color: #fff;
    45   line-height: 1.5;
    46   width: 250px;
    47   padding: 10px;
    48   margin-left: -125px;
    49   border-radius: 3px;
    50 }
    51 #gdpress-manage-form .gdpress.manage .tooltip .tooltip-text a {
    52   color: white;
    53 }
    54 #gdpress-manage-form .gdpress.manage .tooltip:hover .tooltip-text {
    55   visibility: visible;
    56 }
    57 #gdpress-manage-form .gdpress.manage table {
    58   width: 100%;
    59   max-width: 1024px;
    60   border-collapse: collapse;
    61 }
    62 #gdpress-manage-form .gdpress.manage table td,
    63 #gdpress-manage-form .gdpress.manage table th {
    64   line-height: 2.5;
    65   padding: 6px 12px;
    66 }
    67 #gdpress-manage-form .gdpress.manage table td.title,
    68 #gdpress-manage-form .gdpress.manage table th.title {
    69   padding: 0;
    70   line-height: 1;
    71   border-bottom: 1px solid #c3c4c7;
    72 }
    73 #gdpress-manage-form .gdpress.manage table td.downloaded,
    74 #gdpress-manage-form .gdpress.manage table th.downloaded,
    75 #gdpress-manage-form .gdpress.manage table td.exclude,
    76 #gdpress-manage-form .gdpress.manage table th.exclude {
    77   max-width: 25px;
    78 }
    79 #gdpress-manage-form .gdpress.manage table td.downloaded i,
    80 #gdpress-manage-form .gdpress.manage table th.downloaded i,
    81 #gdpress-manage-form .gdpress.manage table td.exclude i,
    82 #gdpress-manage-form .gdpress.manage table th.exclude i {
    83   vertical-align: -5px;
    84 }
    85 #gdpress-manage-form .gdpress.manage table td.downloaded i.dashicons-yes,
    86 #gdpress-manage-form .gdpress.manage table th.downloaded i.dashicons-yes,
    87 #gdpress-manage-form .gdpress.manage table td.exclude i.dashicons-yes,
    88 #gdpress-manage-form .gdpress.manage table th.exclude i.dashicons-yes {
    89   color: #2ECC40;
    90 }
    91 #gdpress-manage-form .gdpress.manage table td.downloaded i.dashicons-info-outline,
    92 #gdpress-manage-form .gdpress.manage table th.downloaded i.dashicons-info-outline,
    93 #gdpress-manage-form .gdpress.manage table td.exclude i.dashicons-info-outline,
    94 #gdpress-manage-form .gdpress.manage table th.exclude i.dashicons-info-outline {
    95   color: #201e14;
    96 }
    97 #gdpress-manage-form .gdpress.manage table td.downloaded input,
    98 #gdpress-manage-form .gdpress.manage table th.downloaded input,
    99 #gdpress-manage-form .gdpress.manage table td.exclude input,
    100 #gdpress-manage-form .gdpress.manage table th.exclude input {
    101   vertical-align: -3px;
    102 }
    103 #gdpress-manage-form .gdpress.manage table td.name,
    104 #gdpress-manage-form .gdpress.manage table th.name {
    105   display: inline-block;
    106   white-space: nowrap;
    107   overflow: hidden;
    108   text-overflow: ellipsis;
    109   max-width: 250px;
    110   width: 15%;
    111 }
    112 #gdpress-manage-form .gdpress.manage table td.href,
    113 #gdpress-manage-form .gdpress.manage table th.href {
    114   display: inline-block;
    115   white-space: nowrap;
    116   overflow: hidden;
    117   text-overflow: ellipsis;
    118   max-width: 362px;
    119   width: 35%;
    120 }
    121 #gdpress-manage-form .gdpress.manage table td.href a,
    122 #gdpress-manage-form .gdpress.manage table th.href a {
    123   text-decoration: none;
    124   color: #3c434a;
    125 }
    126 #gdpress-manage-form .gdpress.manage table tbody th {
    127   text-align: left;
    128 }
    129 #gdpress-manage-form .gdpress.manage table tbody tr.even {
    130   background-color: #f0f0f1;
    131 }
    132 #gdpress-manage-form .gdpress.manage table tbody tr.info {
    133   background-color: #C2EEFF;
    134 }
    135 #gdpress-manage-form .gdpress.manage table tbody tr.warning {
    136   background-color: #FFEF87;
    137 }
    138 #gdpress-manage-form .button-cancel {
    139   color: #a00;
    140   text-decoration: none;
    141   border-color: transparent;
    142   box-shadow: none;
    143   background: 0 0;
    144   border-radius: 3px;
    145   white-space: nowrap;
    146   padding: 1px 10px !important;
    147 }
    148 #gdpress-manage-form .button-cancel:hover {
    149   cursor: pointer;
    150   background: #d54e21;
    151   color: #fff;
    152   border-color: #d54e21;
    153 }
    154 #gdpress-help-form .postbox {
    155   padding: 0 15px 5px;
    156 }
    157 #gdpress-help-form .postbox .column-container {
    158   display: flex;
    159   flex-flow: row wrap;
    160   justify-content: space-between;
    161 }
    162 #gdpress-help-form .postbox .column-container .column ul li {
    163   margin-bottom: 10px;
    164 }
    165 #gdpress-help-form .postbox .column-container .column ul li:last-child {
    166   margin-bottom: none;
    167 }
    168 #gdpress-help-form .postbox .column-container .column ul li a {
    169   text-decoration: none;
    170   line-height: 1.45;
    171 }
    172 #gdpress-help-form .postbox .column-container .column ul li a i.dashicons {
    173   margin-right: 5px;
    174   color: #646970;
    175 }
    176 #gdpress-help-form .postbox .column-container .column.last {
    177   margin-right: 45px;
    178 }
    179 #gdpress-help-form .postbox .column-container .column.last .signature {
    180   text-align: center;
    181 }
    182 #gdpress-help-form .postbox .column-container .column.last .signature .dashicons-heart {
    183   color: #FF4136;
    184 }
     4 *            https://daan.dev
     5 */
     6
     7/**
     8 * Typography
     9 */
     10@import "gdpr-press-admin-google-fonts.min.css";
     11
     12#wpwrap {
     13    background-color: rgb(248 250 252 / 1);
     14}
     15
     16.gdpress {
     17    font-family: "Public Sans", Arial, sans-serif;
     18    max-width: 1350px;
     19}
     20
     21.gdpress h1 {
     22    font-family: Poppins, Verdana, sans-serif;
     23    font-weight: 800;
     24}
     25
     26.gdpress h2,
     27.gdpress h3,
     28.gdpress h4,
     29.gdpress h5,
     30.gdpress h6 {
     31    font-family: Poppins, Verdana, sans-serif;
     32    font-weight: 600;
     33}
     34
     35/**
     36 * Buttons
     37 */
     38.gdpress .button {
     39    color: #00adda;
     40    font-family: Poppins, Verdana, sans-serif;
     41    border-radius: 10px;
     42    border: none;
     43    font-weight: 500;
     44    padding: 7px 20px;
     45    margin-right: 1em;
     46    background-color: transparent;
     47}
     48
     49.gdpress .button:hover {
     50    background-color: transparent;
     51}
     52
     53.gdpress .button-primary {
     54    color: white;
     55    background-color: #00adda;
     56}
     57
     58.gdpress .button-primary:hover {
     59    background-color: #09c;
     60}
     61
     62.gdpress .button-cancel {
     63    color: #a00;
     64    text-decoration: none;
     65    border-color: transparent;
     66    box-shadow: none;
     67    background: 0 0;
     68    white-space: nowrap;
     69}
     70
     71.gdpress .button-cancel:hover {
     72    cursor: pointer;
     73    background: #d54e21;
     74    color: #fff;
     75    border-color: #d54e21;
     76    border-radius: 10px;
     77}
     78
     79.gdpress #submit {
     80    background: #00adda;
     81    border: 0;
     82    color: #fff;
     83    cursor: pointer;
     84}
     85
     86.gdpress #submit:hover {
     87    background-color: #0099cc;
     88}
     89
     90/**
     91 * Navigation
     92 */
     93.gdpress h2.gdpress-nav {
     94    border-bottom: 0;
     95    padding-bottom: 3px;
     96}
     97
     98.gdpress h2.gdpress-nav a {
     99    border: 0;
     100    background-color: transparent;
     101    font-weight: 600;
     102    box-shadow: none;
     103}
     104
     105.gdpress h2.gdpress-nav .nav-tab {
     106    color: #000;
     107}
     108
     109.gdpress h2.gdpress-nav .nav-tab:last-child {
     110    float: right;
     111}
     112
     113.gdpress h2.gdpress-nav .nav-tab-active {
     114    color: #00adda;
     115}
     116
     117.gdpress h2.gdpress-nav .nav-tab:hover {
     118    color: #00adda;
     119}
     120
     121.gdpress-nav .dashicons-before:before {
     122    margin-right: 0.25em;
     123    line-height: 1.15em;
     124}
     125
     126.gdpress form {
     127    max-width: 1350px;
     128}
     129
     130.gdpress form .dashicons {
     131    line-height: 15px;
     132}
     133
     134/**
     135 * Containers
     136 */
     137.gdpress-manage-container,
     138.gdpress-settings-container,
     139.gdpress-help-container {
     140    padding: 5px 25px 25px;
     141    margin-bottom: 30px;
     142    box-shadow: 0 10px 20px 1px #ccc;
     143    border: 0;
     144    border-top: 4px solid #00adda;
     145    border-radius: 10px;
     146    background: #fff;
     147}
     148
     149.gdpress-manage-container .option-title {
     150    display: none;
     151}
     152
     153.gdpress-container {
     154    margin-top: 1.5em;
     155}
     156
     157.gdpress-container p {
     158    text-align: center;
     159    margin-bottom: 2em;
     160}
     161
     162/**
     163 * Table styles (Preserved)
     164 */
     165.gdpress-manage-container table {
     166    width: 100%;
     167    border-collapse: collapse;
     168}
     169
     170.gdpress-manage-container table td,
     171.gdpress-manage-container table th {
     172    line-height: 2.5;
     173    padding: 6px 12px;
     174}
     175
     176.gdpress-manage-container table .gdpress-manage-cache {
     177    border-top: 1px solid #c3c4c7;
     178}
     179
     180.gdpress-manage-container table .gdpress-manage-cache th {
     181    font-size: 14px;
     182    color: #1d2327;
     183    padding: 0;
     184}
     185
     186.gdpress-manage-container table td.title,
     187.gdpress-manage-container table th.title {
     188    padding: 0;
     189    line-height: 1;
     190    border-top: 1px solid #c3c4c7;
     191}
     192
     193.gdpress-manage-container table td.downloaded,
     194.gdpress-manage-container table th.downloaded,
     195.gdpress-manage-container table td.exclude,
     196.gdpress-manage-container table th.exclude {
     197    max-width: 25px;
     198}
     199
     200.gdpress-manage-container table td.downloaded i,
     201.gdpress-manage-container table th.downloaded i,
     202.gdpress-manage-container table td.exclude i,
     203.gdpress-manage-container table th.exclude i {
     204    vertical-align: -5px;
     205}
     206
     207.gdpress-manage-container table td.downloaded i.dashicons-yes,
     208.gdpress-manage-container table td.exclude i.dashicons-yes {
     209    color: #2ECC40;
     210}
     211
     212.gdpress-manage-container table td.downloaded i.dashicons-info-outline,
     213.gdpress-manage-container table td.exclude i.dashicons-info-outline {
     214    color: #201e14;
     215}
     216
     217.gdpress-manage-container table td.downloaded input,
     218.gdpress-manage-container table td.exclude input {
     219    vertical-align: -3px;
     220}
     221
     222.gdpress-manage-container table td.name,
     223.gdpress-manage-container table th.name {
     224    display: inline-block;
     225    white-space: nowrap;
     226    overflow: hidden;
     227    text-overflow: ellipsis;
     228    max-width: 250px;
     229    width: 15%;
     230}
     231
     232.gdpress-manage-container table td.href,
     233.gdpress-manage-container table th.href {
     234    display: inline-block;
     235    white-space: nowrap;
     236    overflow: hidden;
     237    text-overflow: ellipsis;
     238    max-width: 362px;
     239    width: 35%;
     240}
     241
     242.gdpress-manage-container table td.href a {
     243    text-decoration: none;
     244    color: #3c434a;
     245}
     246
     247.gdpress-manage-container table tbody th {
     248    text-align: left;
     249}
     250
     251.gdpress-manage-container table tbody tr.even {
     252    background-color: #f0f0f1;
     253}
     254
     255/* Blue highlighted rows for Google Fonts upsell */
     256.gdpress-manage-container table tbody tr.info {
     257    background-color: #C2EEFF;
     258}
     259
     260/* Yellow highlighted rows for denylisted resources */
     261.gdpress-manage-container table tbody tr.warning {
     262    background-color: #FFEF87;
     263}
     264
     265/**
     266 * Tooltip
     267 */
     268.gdpress-manage-container .tooltip {
     269    position: relative;
     270    font-size: 16px;
     271    line-height: 20px;
     272}
     273
     274.gdpress-manage-container .tooltip .tooltip-text {
     275    visibility: hidden;
     276    position: absolute;
     277    top: 100%;
     278    left: 100%;
     279    z-index: 10000;
     280    background-color: rgba(0, 0, 0, 0.75);
     281    font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif;
     282    font-size: 0.8em;
     283    color: #fff;
     284    line-height: 1.5;
     285    width: 250px;
     286    padding: 10px;
     287    margin-left: -30px;
     288    border-radius: 3px;
     289}
     290
     291.gdpress-manage-container .tooltip .tooltip-text a {
     292    color: white;
     293}
     294
     295.gdpress-manage-container .tooltip:hover .tooltip-text {
     296    visibility: visible;
     297}
     298
     299/**
     300 * Help Tab Specific
     301 */
     302.gdpress-help-container .postbox {
     303    padding: 0;
     304    box-shadow: none;
     305    border: 0;
     306}
     307
     308.gdpress-help-container .column-container {
     309    display: flex;
     310    flex-flow: row wrap;
     311    justify-content: space-between;
     312}
     313
     314.gdpress-help-container .column ul li {
     315    margin-bottom: 10px;
     316}
     317
     318.gdpress-help-container .column ul li a {
     319    text-decoration: none;
     320    line-height: 1.45;
     321}
     322
     323.gdpress-help-container .column ul li a i.dashicons {
     324    margin-right: 5px;
     325    color: #646970;
     326}
     327
     328.gdpress-help-container .column.last {
     329    margin-right: 45px;
     330}
     331
     332.gdpress-help-container .column.last .signature {
     333    text-align: center;
     334}
     335
     336.gdpress-help-container .column.last .signature-image {
     337    width: 185px;
     338}
     339
    185340/**
    186341 * Loader
    187342 */
    188343.gdpress-loading {
    189   position: fixed;
    190   background-color: rgba(255, 255, 255, 0.6);
    191   width: 100%;
    192   height: 100%;
    193   top: 0;
    194   left: 0;
    195   text-align: center;
    196 }
     344    position: fixed;
     345    background-color: rgba(255, 255, 255, 0.6);
     346    width: 100%;
     347    height: 100%;
     348    top: 0;
     349    left: 0;
     350    text-align: center;
     351}
     352
    197353.gdpress-loading .spinner {
    198   top: 50%;
    199   left: 50%;
    200   position: absolute;
    201   -ms-transform: translateX(-50%);
    202   transform: translateX(-50%);
    203 }
    204 /**
    205  * Welcome Block
    206  */
     354    top: 50%;
     355    left: 50%;
     356    position: absolute;
     357    -ms-transform: translateX(-50%);
     358    transform: translateX(-50%);
     359}
     360
    207361#footer-thankyou a {
    208   vertical-align: -0.65em;
    209 }
     362    vertical-align: -0.65em;
     363}
     364
    210365#footer-thankyou .dashicons.ffwp-heart {
    211   vertical-align: middle;
    212 }
    213 #footer-thankyou .dashicons.ffwp-heart:before {
    214   color: #FF4136;
    215 }
     366    vertical-align: middle;
     367    color: #FF4136;
     368}
     369
    216370#footer-thankyou .signature-image {
    217   width: 96px;
    218 }
     371    width: 96px;
     372}
     373
    219374/*# sourceMappingURL=./gdpress-admin.css.map */
  • gdpr-press/trunk/assets/js/gdpress-admin.js

    r2679157 r3498092  
    22 * @package   GDPRess
    33 * @author    Daan van den Bergh
    4  *            https://ffw.press
     4 *            https://daan.dev
    55 */
    66jQuery(document).ready(function ($) {
  • gdpr-press/trunk/gdpr-press.php

    r2780136 r3498092  
    11<?php
    2 defined('ABSPATH') || exit;
    32/**
    43 * Plugin Name: GDPRess
    54 * Plugin URI: https://wordpress.org/plugins/gdpr-press/
    65 * Description: Easily eliminate external requests with GDPRess.
    7  * Version: 1.2.3
    8  * Author: Daan from FFW.Press
    9  * Author URI: https://ffw.press
     6 * Version: 1.3.0
     7 * Author: Daan from Daan.dev
     8 * Author URI: https://daan.dev
    109 * License: GPL2v2 or later
    1110 * Text Domain: gdpr-press
    1211 */
    1312
    14 define('GDPRESS_PLUGIN_DIR', plugin_dir_path(__FILE__));
    15 define('GDPRESS_PLUGIN_FILE', __FILE__);
    16 define('GDPRESS_PLUGIN_BASENAME', plugin_basename(GDPRESS_PLUGIN_FILE));
    17 define('GDPRESS_STATIC_VERSION', '1.2.0');
    18 define('GDPRESS_DB_VERSION', '1.0.2');
     13defined( 'ABSPATH' ) || exit;
     14
     15define( 'GDPRESS_PLUGIN_DIR', plugin_dir_path( __FILE__ ) );
     16define( 'GDPRESS_PLUGIN_FILE', __FILE__ );
     17define( 'GDPRESS_PLUGIN_BASENAME', plugin_basename( GDPRESS_PLUGIN_FILE ) );
     18define( 'GDPRESS_STATIC_VERSION', '1.2.0' );
     19define( 'GDPRESS_DB_VERSION', '1.0.2' );
    1920
    2021/**
     
    2526 * @return mixed|void
    2627 */
    27 function gdpress_autoload($class)
    28 {
    29     $path = explode('_', $class);
    30 
    31     if ($path[0] != 'Gdpress') {
    32         return;
    33     }
    34 
    35     if (!class_exists('FFWP_Autoloader')) {
    36         require_once(GDPRESS_PLUGIN_DIR . 'ffwp-autoload.php');
    37     }
    38 
    39     $autoload = new FFWP_Autoloader($class);
    40 
    41     return include GDPRESS_PLUGIN_DIR . 'includes/' . $autoload->load();
    42 }
    43 
    44 spl_autoload_register('gdpress_autoload');
     28require_once GDPRESS_PLUGIN_DIR . 'vendor/autoload.php';
    4529
    4630/**
    4731 * All systems GO!!!
    4832 *
    49  * @return Gdpress
     33 * @return GDPRess\Plugin
    5034 */
    51 function gdpr_press_init()
    52 {
    53     static $gdpress = null;
    54 
    55     if ($gdpress === null) {
    56         $gdpress = new Gdpress();
    57     }
    58 
    59     return $gdpress;
    60 }
    61 
    62 gdpr_press_init();
     35$gdpress = new GDPRess\Plugin();
  • gdpr-press/trunk/readme.txt

    r2780136 r3498092  
    11=== GDPRess | Eliminate external requests to increase GDPR compliance ===
    22Contributors: DaanvandenBergh
    3 Tags: gdpr, dsvgo, avg, external, 3rd party, requests, minimize
    4 Requires at least: 5.8
    5 Tested up to: 5.9
    6 Stable tag: 1.2.3
     3Tags: gdpr, dsgvo, avg, external, 3rd party, requests, minimize
     4Requires at least: 5.9
     5Tested up to: 6.9
     6Stable tag: 1.3.0
    77Requires PHP: 7.2
    88License: GPLv2 or later
     
    1111== Description ==
    1212
    13 In January, 2022 [a German court ruled](https://ffw.press/blog/gdpr/google-fonts-violates-gdpr-germany/) that a website owner was in breach of GDPR and should pay a € 100,- fine, because embedded Google Fonts were used, essentially transferring the user's personal data (IP address) without the user's prior consent.
     13**GDPRess can be downloaded for free without any paid subscription from [the official WordPress repository](https://wordpress.org/plugins/gdpr-press/).**
     14
     15In January 2022 [a German court ruled](https://daan.dev/blog/gdpr/google-fonts-violates-gdpr-germany/) that a website owner was in breach of GDPR and should pay a € 100,- fine, because embedded Google Fonts were used, essentially transferring the user's personal data (IP address) without the user's prior consent.
    1416
    1517= What's embedding? =
    1618
    17 When an external (i.e. loaded from another server, besides your own) resource is embedded into a webpage, it basically means that the resource behaves as if it's loaded from the same server hosting the webpage.
     19When an external (i.e., loaded from another server, besides your own) resource is embedded into a webpage, it basically means that the resource behaves as if it's loaded from the same server hosting the webpage.
    1820
    1921= Why is using embedded resources in breach of GDPR? =
    2022
    21 Because of [the way the internet works](https://ffw.press/blog/how-to/google-fonts-gdpr/). When a browser (i.e. computer) requests a file (e.g. an image or a font file), the server needs the IP address of that computer to send it back. All these requests (including the IP address) are logged in a so-called `access.log`.
     23Because of [the way the internet works](https://daan.dev/blog/how-to/google-fonts-gdpr/#h-how-the-internet-works). When a browser (i.e., computer) requests a file (e.g., an image or a font file), the server needs the IP address of that computer to send it back. All these requests (including the IP address) are logged in a so-called `access.log`.
    2224
    2325Once this IP address leaves the European Union, your website is violating the GDPR.
     
    2527= What does this plugin do? =
    2628
    27 GDPRess scans your homepage for 3rd party scripts (JS) and stylesheets (CSS), and:
     29GDPRess scans your homepage for third party scripts (JS) and stylesheets (CSS), and:
    2830
    29 * Allows you to download or exclude them from downloading,
    30 * Parses the stylesheets for loaded font files, downloads them, and rewrites the stylesheet to use the local copies,
     31* Allows you to download or exclude them from downloading.
     32* Parses the stylesheets for loaded font files, downloads them, and rewrites the stylesheet to use the local copies.
    3133* Makes sure the local copies of each script/stylesheet are used in your site's frontend.
    3234
     
    3537== Installation ==
    3638
    37 1. Upload the plugin files to the `/wp-content/plugins/gdpr-press` directory, or install the plugin through the WordPress plugins screen directly.
     391. Upload the plugin files to the `/wp-content/plugins/gdpr-press` directory or install the plugin through WordPress Plugins screen directly.
    38402. Activate the plugin through the 'Plugins' screen in WordPress
    39413. Use the Settings -> GDPRess screen to configure the plugin
     
    5153= Will this plugin allow me to use Google Analytics in compliance with GDPR? =
    5254
    53 No, because much more is needed than *just* downloading analytics.js/gtag.js to your server. To [use Google Analytics in compliance with GDPR](https://ffw.press/blog/gdpr/google-analytics-compliance-gdpr/), you need [CAOS Pro](https://ffw.press/wordpress/caos-pro/).
     55No, because much more is needed than *just* downloading analytics.js/gtag.js to your server. To [use Google Analytics in compliance with GDPR](https://daan.dev/blog/gdpr/google-analytics-compliance-gdpr/), you need [CAOS Pro](https://daan.dev/wordpress/caos-pro/).
    5456
    5557== Screenshots ==
    5658
    57 1. GDPRess' Start screen, simply click Scan Website to start.
    58 2. After running the initial scan, external requests are listed. Exclude a file when e.g. you suspect it might not work properly when it's downloaded.
    59 3. Google Analytics is automatically excluded, because simply downloading the file is not enough to use it in compliance with GDPR. Click on the link in the tooltip for more information.
    60 4. Google Fonts is supported, but when many font families and/or font styles are detected, GDPRess will offer an alternative approach to optimize the request.
     591. GDPRess' Start screen, click Scan Website to start.
     602. After running the initial scan, external requests are listed. Exclude a file when e.g., you suspect it might not work properly when it's downloaded.
     613. Google Analytics is automatically excluded because simply downloading the file is not enough to use it in compliance with GDPR. Click on the link in the tooltip for more information.
     624. Google Fonts are supported, but when many font families and/or font styles are detected, GDPRess will offer an alternative approach to optimize the request.
    61635. When the selected files are downloaded, the URLs of the local copies are listed.
    6264
    6365== Changelog ==
     66
     67= 1.3.0 | The "He is risen!" Release =
     68* Added: Admin bar menu with "Scan this page" option to trigger a scan on the current page.
     69* Added: An exclusion list — known resources that break when locally hosted (e.g., Google Analytics, Stripe.js, Usercentrics) are now automatically excluded, with a tooltip explaining why.
     70* Added: Google Fonts and Web Font Loader requests are highlighted with a suggestion to use OMGF (Pro) for more advanced optimization.
     71* Added: Web Font Loader (`webfont.js`) is now detected and downloaded locally.
     72* Improved: "Re-scan" button replaces "Scan again" — clears the cache and rescans in one click.
     73* Improved: Settings page restyled to match the look and feel of other Daan.dev plugins.
     74* Improved: "Save Changes & Download" renamed to "Process Changes" — also deletes locally hosted files for excluded resources.
     75* Fixed: Protocol-relative URLs (`//`) are now correctly detected as external resources.
     76* Fixed: Non-external URI schemes (`data:`, `blob:`, `javascript:`) are no longer mistakenly processed.
     77* Fixed: CSS paths are now correctly rewritten after a stylesheet is downloaded.
     78* Fixed: Test Mode can now always be toggled.
     79* Tested up to WordPress 6.9.
    6480
    6581= 1.2.3 =
     
    6783
    6884= 1.2.2 =
    69 * Fixed: GDPRess now runs before OMGF/CAOS, so e.g. OMGF Pro can optimize previously externally hosted stylesheets.
     85* Fixed: GDPRess now runs before OMGF/CAOS, so e.g., OMGF Pro can optimize previously externally hosted stylesheets.
    7086
    7187= 1.2.1 =
     
    7490
    7591= 1.2.0 =
    76 * Added: Run a quick scan on each page to see if new external (3rd party) requests are present on that page!
     92* Added: Run a quick scan on each page to see if new external (third party) requests are present on that page!
    7793* Added: Test Mode (enabled by Default) to allow users to first test the optimizations before releasing them to the public.
    7894* Fixed: Don't use WP_Filesystem to get and put file contents.
     
    8197* Added: Google Fonts support
    8298  - When many Font Families or Font Styles are detected, GDPR Press will suggest to use OMGF to optimize the request before downloading it.
    83 * Fixed several bugs, notices and warnings.
     99* Fixed several bugs, notices, and warnings.
    84100
    85101= 1.0.2 =
    86 * Added: tooltip next to success message.
     102* Added: tooltip next to a success message.
    87103* Fixed: tooltip-icon line height.
    88104
    89105= 1.0.1 =
    90 * Fixed: Conflicts with several caching/optimization plugins:
     106* Fixed: Conflicts with some caching/optimization plugins:
    91107  - Autoptimize
    92108  - WP Rocket
Note: See TracChangeset for help on using the changeset viewer.